私たちのアプリケーション(Zend Framework 2 + Doctrine 2)は、BillingAddress
などの関連オブジェクトを参照するOrder
エンティティを持っています。注文を作成および更新するためのREST APIを実装しました。データはこのAPIに連想配列として渡され、参照されるオブジェクトのデータはこの配列内にカプセル化されます。 I. E.はOrder
APIが受信したデータがどのように見えるこれについて注意するには、このZF2 + Doctrine 2:ZF2フォームによる水和関連オブジェクト
$data = [
// This is an attribute of the Order entity itself
'remarks' => 'Urgent order',
// This is the data of the referenced BillingAddress
'billing_address' => [
'firstname' => 'Barry',
'lastname' => 'Fooman'
]
];
まず最初はBillingAddress
与えられたが、新規または既存のもののいずれかとすることができるという事実です!後者の場合、id
はbilling_address
データの一部です。
Doctrineが更新または自動的に参照されるオブジェクトを作成するの面倒をDoctrineObject
ハイドレーター
$hydrator = new DoctrineObject($entityManager);
$hydrator->hydrate($order, $data);
を使用します。これまでのところ、これまでのやり方です:受信したデータを取り、少しの処理をしてデータをサニタイズして検証し、ハイドレーターに電話してください。
ただし、受信データの簡単な消毒のためにZend\Form\Form
を使用します。注文の単純属性のForm
を設定すると、
class OrderForm
extends \Zend\Form\Form
{
public function __construct()
{
parent::__construct('order');
$this
->add([
'name' => 'remarks',
'type' => 'text'
]);
}
}
非常に簡単です。しかし、私は参照しているオブジェクトに苦労しています。ハイドレーターを直接使うようにDoctrineによって参照オブジェクトが作成または更新されるようにフォームを設定するにはどうすればよいですか? 「サブフォーム/フィールドセット」を作成する必要がありますか?
アドバイスをいただきありがとうございます。私は現在、実装に取り組んでおり、完了した時点で正しい答えを記入します。すべてが動作します – Subsurf
これはトリックでした – Subsurf