1

POST データをオブジェクトにバインドする方法は、Doctrine に保存または編集できます。

注釈エンティティで Doctrine を使用します。配列データをエンティティにバインドするとわかりません。

Symfony のコンポーネントがスタンドアロンであることについても読みました。

例 :

$_POST # form data , array

# this is how doctrine save object
$product = new Product();
$product->setName('product1');
$entityManager->persist($product);
$entityManager->flush();

$product = $helper->convert($_POST, ...) # return product object $product を $entityManager に永続化できるようにしたい のです。

4

2 に答える 2

2

これはフォームの扱い方に役立ちます: http://symfony.com/doc/current/book/forms.html

Entity ユーザーにデータを配置するには、セッター。

$entity->setName('Mitchel');

エンティティに投稿したい場合は、次のような関数を作成する必要があります:

    public function setAttributes( array $values )
    {
        foreach( $values as $attribute => $value ) {
            $dateEng = "/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/";
            $dateNl  = "/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/";
            if( preg_match ($dateEng, $value) OR preg_match ($dateNl, $value) ){
                $value = date_create( $value );
            }

            if(is_string( $value )){
                if(preg_match( '/^\d+$/', $value )){
                    $value = (int) $value;
                }
            }

            $this->{'set' . ucfirst( $attribute )}( $value );
        }

        return $this;
    }

これは私にとってはうまくいきます=)そして、うまくいかないケースを見つけたら、コードを追加するだけです。

于 2012-09-18T13:24:24.317 に答える
2

この方法を選択する場合は、最初にClassMetadataクラスを使用してフィールド名を決定する必要があります。そうしないと、ユーザーが余分なデータを投稿したときに「PHP Fatal error: Call to undefined method ...」というメッセージが表示されます。

このようなもの:

<?php 
function setAttributes($values) {
$cm = new ClassMetadata(__CLASS__);
foreach ($cm->getFieldNames() as $field) { 
  if (array_key_exists($values, $field))
    $this->{'set' . ucfirst( $attribute )}( $value );
// ...

しかし、フォームコンポーネントを学ぶことを強くお勧めします。開始するのに 1 日しかかからず、複雑なフォームを作成するのに約 1 週間かかりました。

于 2012-09-18T22:53:22.953 に答える