Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] dane z bazy do formularza
Forum PHP.pl > Forum > PHP > Frameworki
phpsuse
Witam,
Mam stworzony formulaz Zend Form

  1. <?php
  2. form new mojForm()
  3. ?>

pole w formularzu nazywa sie content

oraz bazę danych
  1. <?php
  2. $dane = new dane();
  3. ?>


chcialbym wstawic z bazy danych konkretnego wiersza o ID np 5
nazwie TRESC dane do mojego formularza w pole content
i pokazac w widoku.

Jak coś takiego zrealizaowac ?
batman
Sposobów jest kilka. Podam Ci najszybszy (co nie znaczy, że najlepszy).
1. $dane->find(5); - znajdziesz w dokumentacji.
2. Zapis potrzebnych danych do tablicy.
3. $form->populate($utworzona_wczesniej_tablica); - znajdziesz w dokumentacji.
melkorm
Eh, naprawdę Zend nie nalezy do prostych Framework'ów a jeżeli Ty nie potrafisz wyczytać z manuala takiej prostej rzeczy to naparwdę ... zabierz się za jakiś inny FW.


Co do tematu było już wczesniej jak przekazać dane do Form'a.

23.4.2.1. Populating and Retrieving Values
phpsuse
cieżko bo cięzko ale ide do przodu.

Pytam dużo, ale małe rezultaty już są.

Coś mi się pomału udaje.

Dzięki za podpowiedzi.

ja zrobiłem coś takiego :
  1. <?php
  2. $row = $dane->fetchRow($dane->select()->where('id = ?', 5));
  3. $form = new mojForm();
  4. $form->getElement('content')->setValue($row->content);
  5. $this->view->form = $form;
  6. ?>


Przemek
melkorm
Po coś Zend jest i po coś jest zbudowany na architekturze MVC, pewnie po to by z tego korzystac smile.gif

A więc:

Modele
I wnich pobieraj dane, a nie w controllerach. (zresztą widze ze tworzysz obiekt modelu, wiec korzystaj zn iego i w nim psiz metody pobierające dane)

Do szukania po id korzystaj z:
  1. <?php
  2. $row = $model->find($id)->current();
  3. //i teraz możesz
  4. $row->toArray(); // tablica
  5. $row->pole; //wartość pola jak wolisz.
  6. ?>


jeżeli pola formularza i pola w bazie się pokrywają wystarczy przekazać tablice do forma i sam wszystko za Ciebie zrobi winksmiley.jpg
phpsuse
Czyli tak:

mam model:
  1. <?php
  2. class politicsModel extends Zend_Db_Table_Abstract {
  3.    /**
  4.      * The default table name
  5.      */
  6.    protected $_name = 'politics';
  7.    
  8.    public function  getPolitics()
  9.    {
  10.        $sql = 'SELECT * FROM politics WHERE id = 1';
  11.        $result = $this->fetchRow($sql);
  12.        return $result->content;
  13.    }
  14.  
  15. }
  16. ?>


mam controler:
  1. <?php
  2. public function init()
  3.    {
  4.       require_once APPLICATION_PATH . '/models/politics.php';
  5.      
  6.      
  7.    }
  8.  
  9.    public function indexAction()
  10.    {
  11.        $dane = new politicsModel();
  12.          $form = new PoliticsForm();
  13.                  
  14.          $form->getElement('content')->setValue($dane->getPolitics->content);
  15.         $this->view->form = $form;
  16.  
  17.    }
  18. ?>


no i widok:
  1. <?php
  2.    echo $this->form;
  3. ?>


I zero efektów.

Pytanie:
Jak przekazac całość do formularza.
Czy jak tylko część sie bedzie pokreywać to czy bedzie działać.
nie działa
  1. <?php
  2. return $result->content;
  3. ?>
pgrzelka
  1. <?php
  2. $form->populate($tablica_z_danymi);
  3. ?>
ta metoda uzupełnia formularz danymi z tablicy, tablica powinna wyglądać tak:
  1. <?php
  2. $tablica = array(
  3. 'pole_formularza' => 'jego zawartość',
  4. 'drugie_pole' => 'jego zawartość',
  5. );
  6. ?>


Twój kod
Cytat
$form->getElement('content')->setValue($dane->getPolitics->content);
ma błąd, powinno być
  1. <?php
  2. $form->getElement('content')->setValue($dane->getPolitics());
  3. ?>
phpsuse
Ni i nadal jest problem zrobiłem jak kazałeś i dalej nic.
w modeli: return
  1. <?php
  2. $result->content;
  3. ?>

w kontrolerze:
  1. <?php
  2. $form->getElement('content')->setValue($dane->getPolitics);
  3. $this->view->form = $form;
  4. ?>

widok:
  1. <?php
  2. echo $this->form;
  3. ?>


Pole formularza jest puste.


Jak zrobie
model:
  1. <?php
  2. return $result->toArray();
  3. ?>

ckonroler:
  1. <?php
  2. $form->populate($dane->getPolitics);
  3. $this->view->form = $form;
  4. ?>


i widok taki sam to wyskakuje mi błąd:
Catchable fatal error: Argument 1 passed to Zend_Form::populate() must be an array, null given, called in C:\xampp\htdocs\ims2\application\controllers\PoliticsController.php on line 19 and defined in C:\Program Files\Zend\Zend Studio - 7.0.0\plugins\org.zend.php.framework.resource_7.0.0.v20090531-1639\resources\ZendFramework-1\library\Zend\Form.php on line 1871
askone
Hej

Zapomniałeś o nawiasach...
Tak jest:
Kod
$form->getElement('content')->setValue($dane->getPolitics);


Spróbuj tak:
Kod
$form->getElement('content')->setValue($dane->getPolitics());
phpsuse
Wyskakuje cos takiego:

Application error
Exception information:

Message: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

Wstawilem:
  1. <?php
  2. $result = $this->find(1)->current();
  3. ?>


i zadzialalo.


Ale nie wiem dlaczego poprzesnie select nie zadzialalo. pewnie dlatego ze 1 nie byla w apostrofach ?

Jeszcze jedno pytanie.
Nie potrzebuje odszukac po id =1 tylko po ostatnim rekordzie w bazie. Chce wstawic pole content do formularza ale z ostatniego rekordu cos takiego jak Select MAX (np id);
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.