Zend-Framework 2 の Form-Component のチュートリアル/リファレンスを読みましたが、何らかの形で見逃したので、ここで質問しています。
というオブジェクトを取得し、Node
それをフォームにバインドしました。Zend\Stdlib\Hydrator\ArraySerializable
-Standard-Hydratorを使用しています。したがって、私のNode
-object には、次のような と の 2 つのメソッドがexchangeArray()
ありgetArrayCopy()
ます。
class Node
{
public function exchangeArray($data)
{
// Standard-Felder
$this->node_id = (isset($data['node_id'])) ? $data['node_id'] : null;
$this->node_name = (isset($data['node_name'])) ? $data['node_name'] : null;
$this->node_body = (isset($data['node_body'])) ? $data['node_body'] : null;
$this->node_date = (isset($data['node_date'])) ? $data['node_date'] : null;
$this->node_image = (isset($data['node_image'])) ? $data['node_image'] : null;
$this->node_public = (isset($data['node_public'])) ? $data['node_public'] : null;
$this->node_type = (isset($data['node_type'])) ? $data['node_type']:null;
$this->node_route = (isset($data['node_route'])) ? $data['node_route']:null;
}
public function getArrayCopy()
{
return get_object_vars($this);
}
}
私のコントローラーには、editAction()
. Node
そこで、この-objectの値を変更したいと思います。だから私はbind
自分のフォームのメソッドを使用しています。node_name
私のフォームには、とプロパティを変更するためのフィールドしかありませんnode_body
。フォームを検証し、フォームのNode
送信後に -objectをダンプすると、node_name
およびnode_body
-properties には、送信されたフォームからの値が含まれるようになりました。ただし、以前に初期値が含まれていたとしても、他のすべてのフィールドは現在空です。
class AdminController extends AbstractActionController
{
public function editAction()
{
// ... more stuff here (getting Node, etc)
// Get Form
$form = $this->_getForm(); // return a \Zend\Form instance
$form->bind($node); // This is the Node-Object; It contains values for every property
if(true === $this->request->isPost())
{
$data = $this->request->getPost();
$form->setData($data);
// Check if form is valid
if(true === $form->isValid())
{
// Dumping here....
// Here the Node-object only contains values for node_name and node_body all other properties are empty
echo'<pre>';print_r($node);echo'</pre>';exit;
}
}
// View
return array(
'form' => $form,
'node' => $node,
'nodetype' => $nodetype
);
}
}
node_name
フォーム (および)からの値のみを上書きし、node_body
他の値は上書きしたくありません。それらはそのままにしておく必要があります。
可能な解決策は、他のプロパティを隠しフィールドとしてフォームに与えることだと思いますが、これはしたくありません。
フォーム内に存在しない値を上書きしない可能性はありますか?