6

symfony2 でエンティティ タイプのデフォルト値を作成する方法がわかりませんでした。私のコードは次のようになりました:

$rewardChoice = $this->createFormBuilder($reward)
    ->add('reward_name', 'entity', array(
        'class' => 'FuelFormBundle:Reward',
        'property' => 'reward_name',
        'data' => 2,
        'query_builder' => function(EntityRepository $er){
            return $er->createQueryBuilder('r')
                ->where('r.active = 1')
                ->groupBy('r.reward_id')
                ->orderBy('r.reward_name', 'DESC');

        },
    ))
    ->getForm();

ただし、それを機能させるには、使用しているオブジェクトを渡す必要があります。私の答えは以下です。

私はこれについて多くの異なる答えを見つけましたが、それらはすべてフォームが構築された方法を再構築しました。これははるかに簡単でした。

4

4 に答える 4

9

だから私はこれを機能させるための多くの答えを見つけましたが、それらはすべてフォームを再構築して別の方法で構築するように見えましたが、オブジェクトを設定するのが最も効果的であることがわかったので、誰かが問題に遭遇した場合に備えてソリューションを投稿すると考えましたまた。

これがコントローラーの私のコードです。

// this is setting up a controller and really isn't important 
$dbController = $this->get('database_controller');

// this is getting the user id based on the hash passed by the url from the
// database controller
$user_id = $dbController->getUserIdByHash($hash);

// this is getting the Reward Entity.  A lot of times you will see it written as 
// $reward = new Reward however I am setting info into reward right away in this case
$reward = $dbController->getRewardByUserId($user_id);


$rewardChoice = $this->createFormBuilder($reward)
    ->add('reward_name', 'entity', array(
        'class' => 'FuelFormBundle:Reward',
        'property' => 'reward_name',

        // I pass $reward to data to set the default data.  Whatever you
        // assign to $reward will set the default value.  
        'data' => $reward,  
        'query_builder' => function(EntityRepository $er){
                return $er->createQueryBuilder('r')
                    ->where('r.active = 1')
                    ->groupBy('r.reward_id')
                    ->orderBy('r.reward_name', 'DESC');
        },
    ))
    ->getForm();

これで物事がより明確になることを願っています。私は同じ質問をたくさん見ましたが、この解決策ではありませんでした。

于 2013-10-24T22:34:13.530 に答える
6

これを行う最善の方法は、フォームを作成する前に報酬名を設定することです。例えば:

$reward->setRewardName('your_relationship_reference_here');

$rewardChoice = $this->createFormBuilder($reward)

dataフィールドを使用すると、問題が発生する可能性があります。

于 2018-03-26T12:07:39.333 に答える