Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]problem z formularzem php + Zend
Forum PHP.pl > Forum > PHP > Frameworki
zonta88
Witam

Mam klasę z formularzem o nazwie: OfertaSzukajForm.
Generalnie formularz działa bez zarzutu. Jest jednak 1 mankament. Chciałbym wprowadzić pole wyboru powierzchni mieszkania.
W tabli (w bazie mysql) jest kolumna z odpowiednimi wartościami, na których muszę zrobić selecta by przedstawić tylko te, które użytkownik wybrał.
  1. $this->add(array(
  2. 'name' => 'powierzchnia',
  3. 'type' => 'Select',
  4. 'options' => array(
  5. 'label' => 'Powierzchnia od',
  6. 'empty_option' => '-',
  7. 'value_options' => array(
  8. 'a' => 'od 1 do 50',
  9. 'D' => 'od 51 do 100',
  10. 'G' => 'od 101'
  11. )
  12. ),
  13. ));


Napisałem kod powyżej. Co oczywiście by działało gdyby wartościami w kolumnie "powierzchnia" w bazie danych były litery 'a' , 'D' , 'G'.
Pytanie jak w tym miejscu umieścić jakiegoś Selecta // odwołanie do funkcji która zwraca array tego Selecta ?

Bardzo proszę o pomoc.

Pozdrawiam,
CuteOne
  1. $array = array(
  2. 1 => 'Po od do',
  3. 3 => 'Po od do',
  4. 11 => 'Po od do'
  5. );
  6.  
  7. $select = new Zend_Form_Element_Select('select');
  8. $select -> setMultiOptions($array);


Pobierz z bazy rekordy, przelecieć je pętlą i utwórz z nich tablicę jak wyżej
zonta88
Ok, a mam to zrobić z formularzu, kontrolerze czy modelu?


Na razie w modelu zrobiłem funkcję pobierającą wartość od i do oraz zwracającą array.
  1. public function szukaj($pow1,$pow2)
  2. {
  3. $dbAdapter = $this->sm->get('db_adapter');
  4.  
  5. $sql = new Sql($dbAdapter);
  6. $select = $sql->select('oferty');
  7. $select->where(array(`powierzchnia` >= $pow1 && `powierzchnia` < $pow2));
  8.  
  9. $selectString = $sql->getSqlStringForSqlObject($select);
  10. $wynik = $dbAdapter->query($selectString, $dbAdapter::QUERY_MODE_EXECUTE);
  11.  
  12. if($wynik->count())
  13. return $wynik->current();
  14. else
  15. return array();
  16. }


Da radę wynik jakoś podpiąć pod formularz?
Bo szczerze mówiąc nie wiem jak się zabrać do Twojego rozwiązania.
unixslayer
Ja bym to zrobił w formularzu. Tylko musisz do niego przekazać uchwyt do bazy, np. EntityManager - najlepiej w konstruktorze.

Ale jeżeli korzystasz z ZF2 - a widzę, że chyba korzystasz - to można to zrobić w bardzo prosty sposób:


  1. $this->add(array(
  2. 'type' => 'DoctrineORMModule\Form\Element\EntitySelect',
  3. 'name' => 'powierzchnia',
  4. 'options' => array(
  5. 'empty_option' => 'wybierz',
  6. 'label' => 'Powierzchnia',
  7. 'object_manager' => $em,
  8. 'target_class' => 'Admin\Model\Powierzchnia',
  9. 'is_method' => true,
  10. 'find_method' => array(
  11. 'name' => 'findBy',
  12. 'params' => array(
  13. 'criteria' => $criteria,
  14. 'orderBy' => array('name' => 'ASC'),
  15. ),
  16. ),
  17. ),
  18. ));
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.