Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [eclipse pdt] podpowiadanie metod modelu w petli
Forum PHP.pl > Inne > Komputery i oprogramowanie
krzyszbi
witam

mam następujący problem a jako że eclipse mi do gustu przypadł i ładnie potrafi wszystko prawie smile.gif podpowiedzieć chciałbym się dowiedzieć czy da się osiągnąć taki efekt

używam Zend_Db ( dla mnie pasuje więc to najważniejsze ) a chcę osiągnąć aby eclipse potrafił rozpoznać ze w pętli (foreach) chcę po tablicy obiektów przechodzić i dla każdego elementu podpowiadał metody
nie wiem czy się da tak zrobić

klasa modelu danych
  1. class Model extends Generate_Model{
  2. /**
  3. *
  4. * @param int $limit
  5. * @return Generate_Model
  6. */
  7. public function getAll($limit=100) {
  8. return $this->fetchList(NULL,NULL,$limit);
  9. }
  10. }

klasa wygenerowana modelu danych
  1. <?php
  2. class Generate_Model {
  3. protected $_IDModel;
  4. protected $_PolePierwsze;
  5. protected $_PoleDrugie;
  6. protected $_mapper;
  7. function setIDModel($data) {
  8. $this->_IDModel=$data;
  9. return $this;
  10. }
  11. function getIDModel() {
  12. return $this->_IDModel;
  13. }
  14. function setPolePierwsze($data) {
  15. $this->_PolePierwsze=$data;
  16. return $this;
  17. }
  18. function getPolePierwsze() {
  19. return $this->_PolePierwsze;
  20. }
  21. function setPoleDrugie($data) {
  22. $this->_PoleDrugie=$data;
  23. return $this;
  24. }
  25. function getPoleDrugie() {
  26. return $this->_PoleDrugie;
  27. }
  28. function __call($method, array $args){
  29. $matches = array();
  30. /**
  31. * Recognize methods for Belongs-To cases:
  32. * findBy<field>()
  33. * Use the non-greedy pattern repeat modifier e.g. \w+?
  34. */
  35. if (preg_match('/^findBy(\w+)?$/', $method, $matches)){
  36. $methods = get_class_methods($this);
  37. $check = "set{$matches[1]}";
  38. if (!in_array($check, $methods)){
  39. throw new Exception("Invalid field {$matches[1]} requested for table");
  40. }
  41. $this->getMapper()->findByField($matches[1], $args[0], $this);
  42. return $this;
  43. }
  44. throw new Exception("Unrecognized method '$method()'");
  45. }
  46. public function __set($name, $value){
  47. $method = "set$name";
  48. if (("mapper" == $name) || !method_exists($this, $method)){
  49. throw new Exception("name:$name value:$value - Invalid model property");
  50. }
  51. $this->$method($value);
  52. }
  53. public function __get($name){
  54. $method = "get$name";
  55. if (("mapper" == $name) || !method_exists($this, $method)){
  56. throw new Exception("name:$name - Invalid model property");
  57. }
  58. return $this->$method();
  59. }
  60. public function setOptions(array $options){
  61. $methods = get_class_methods($this);
  62. foreach ($options as $key => $value){
  63. $key = preg_replace_callback("/_(.)/", create_function('$matches','return ucfirst($matches[1]);'), $key);
  64. $method = "set" . ucfirst($key);
  65. if (in_array($method, $methods)){
  66. $this->$method($value);
  67. }
  68. }
  69. return $this;
  70. }
  71. public function setMapper($mapper){
  72. $this->_mapper = $mapper;
  73. return $this;
  74. }
  75. public function getMapper(){
  76. if (null === $this->_mapper){
  77. $this->setMapper(new Generate_Mapper_Model());
  78. }
  79. return $this->_mapper;
  80. }
  81. public function save(){
  82. $this->getMapper()->save($this);
  83. }
  84. public function find($id){
  85. $this->getMapper()->find($id, $this);
  86. return $this;
  87. }
  88. public function fetchAll(){
  89. return $this->getMapper()->fetchAll();
  90. }
  91. public function fetchList($where=null, $order=null, $count=null, $offset=null){
  92. return $this->getMapper()->fetchList($where, $order, $count, $offset);
  93. }
  94.  
  95. }

klasa mapera jest tutaj do niczego nie potrzebna
a teraz kod i to co chce osiągnąć
  1. Zend_Db_Table::setDefaultAdapter($db);
  2.  
  3. try{
  4. $model = new model();
  5.  
  6. $result = $model->getAll();
  7. // dla $result eclipse podpowiada wszytkie metody dostepowe ( setPolePierwsze, getPolePierwsze itp )
  8. //choć jest to tablica obiektów
  9. foreach ($result as $row) {
  10. // a jak zrobić i czy sie da aby eclipse wiedział ze $row to obiekt Generate_Model
  11. //$row->
  12. }
  13. }
  14. catch (Exception $e){
  15. echo '<pre>'.print_r($e->getMessage(),1),'</pre>';
  16. }

czy da się to osiągnąć
generowanie modeli o odpowiednie komętarze phpDoc mogę spokojnie poprawic ale nie wiem o co, jak zrobić aby eclipse wiedział że będzie lista obieków zwrócona a w pętli już operacje na pojedynczym obiekcie
nospor
wchodząc w pętle, $row staje się dla eclipse niezdefiniowaną zmienną lokalną.

edit: mozesz zrobic taki myk:
  1. foreach ($result as $row) {
  2. $row = new Generate_Model();
  3. //$row->
  4. }

Pamietaj jednak by przed odpaleniem skryptu wywalic te linie:
$row = new Generate_Model();
winksmiley.jpg
dr_bonzo
@nospor - o fuj biggrin.gif

  1. foreach ($result as $row ) /* @var $row Generate_Model */
  2. {
  3. $row->
  4. };

Wazna jest pojedyncza gwiazdka w "/*" - dla podwojnej (ala phpdoc) nie dziala.
nospor
@up
wow, to dziala biggrin.gif
dziękować w imieniu swoim i w imieniu autora tematu smile.gif
dr_bonzo
Mi tego z Zenda brakowalo, i probowalem wielokrotnie z /** i nigdy nie dzialalo, ktos mnie kiedys na tym forum chyba uswiadomil smile.gif
krzyszbi
jakie eclipse bo kurcze próbuje w Eclipse Europa, Eclipse Galileo ( oczywiście z PDT ) ale mi nie chce sposób dr_bonzo-a działać
a jednak działa smile.gif wielkie dzięki teraz będzie się na pewno lepiej pisać smile.gif
nospor
u mnie jest najnowszy eclipse i najnowsze PDT
zegarek84
w Netbeans też działą i można też do statycznych obiektów to urzywać jeśli komuś brakuje podpowiadania składni....
krzyszbi
+1 pomógł
dla mnie bardziej taki zapis odpowiada
  1. /* @var $row Generate_Model */
  2. foreach ($result as $row){
  3. $row->
  4. }

i działa smile.gif
ważne aby /* @var $row Generate_Model */ było w jednej linii ( cały komentarz )
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.