2016-06-07 115 views
0

我試圖創建一個窗體進行編輯。 控制器:Zend Framework 2,表格

$someValue = $this->someMapper->someMethod() 
(someMethod returns Hydrator object) 

$form->bind($someValue); 

但它不工作。值不會添加到窗體。 如果我加入到這個控制器:

$form->setData($this->someMapper->extract($someValue); 

這是所有正常添加的形式。我不明白問題是什麼。

保溼對象:

對象(管理員\實體\文章)#331(13){[ 「ID」:保護] =>串(2) 「16」[ 「標題」:保護] => string(85)「fsdgsdgsdgsdg」 [「subHeading」:protected] => string(3)「fdddgdgdg」 [「imgDescription」:protected] => string(4)「jghj」[「text」:protected ] => 串(15) 「ghjghj

」[ 「類別」:保護] =>串(4) 「類別」 [ 「commentation」:保護] =>串(1)爲 「0」[」重要性「:受保護] => string(1)「0」[「path」:protected] => string(48)「fgdfgdgdg -fgdfhwt -gf」 [「comments」:protected] => NULL [「views」:protected] => NULL [「date」:protected] => string(19)「2016-06-06 11:23:05」 [「img」:protected] => string(11)「1492546.jpg」}

View.phtml

<?php 
$form = $this->form; 

$form->prepare(); 

$form->get('submit')->setValue('Update Post'); 

echo $this->form()->openTag($form); 

echo $this->formCollection($form); 

echo $this->form()->closeTag(); 
+0

你需要綁定一個對象來形成,而不是水合物。 http://framework.zend.com/manual/current/en/modules/zend.form.quick-start.html#binding-an-object – newage

+0

我看過了,但不知道該怎麼做 – MoOgur

回答

0

你需要創建一個對象Entity有這樣的性質:

<?php 
class Article 
{ 
    private $id; /* $_POST['id] */ 
    private $headline; /* $_POST['headline']*/ 
    private $author; /* $_POST['author']*/ 
    private $comments; /* $_POST['comments']*/ 
} 

此對象中的屬性必須與POST變量相同。你可以將這個實體綁定到一個表單並設置一個水化器。您可以使用ArrayObject而不是Entity

$request = $this->getRequest(); /* An request object in Controller */ 

$form->bind(new Article()); /* bind entity */ 
// $form->bind(new ArrayObject()); /* or bind ArrayObject */ 
$form->setHydrator(new ObjectProperty()); /* Add a data to properties of an Entity */ 
$form->setData($request->getPost()); /* Set a POST data to form */ 

確認後,您可以從表單中獲得有效數據的Entity

if ($form->isValid()) { 
    $entity = $form->getObject(); /* Entity or ArrayObject */ 
} 
+0

所以我可以添加數據,例如在基地中。我需要從數據庫中提取數據並將它們傳送到窗體進行編輯 – MoOgur

+0

好吧,我明白了。嘗試添加一個水化器到表單。 $ form-> setHydrator(new ObjectProperty()); – newage