web-dev-qa-db-ja.com

symfony2ソナタ管理バンドルのデフォルト値の設定

ソナタ管理バンドルでデフォルト値を設定するにはどうすればよいですか?configureFormFieldsメソッドにデータオプションがありません

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name', null, array('required' => true, 'data' => "my default value"))
    ;
}

データ属性を使用してフィールド内にデフォルト値を設定するにはどうすればよいですか?

19
Anil Gupta

おそらくこれまでにすでに解決していると思いますが、他の人への参照として、getNewInstance()メソッドをオーバーライドし、オブジェクトにデフォルト値を設定できます。

public function getNewInstance()
{
    $instance = parent::getNewInstance();
    $instance->setName('my default value');

    return $instance;
}
47
RobMasters

エンティティのプロパティにデフォルト値を直接割り当てることもできます。

class TheEntity
{
    private $name = 'default name';
}
7

@RobMastersソリューションに加えて:

リレーションを設定する場合は、(完全なオブジェクトではなく)entitymanagerから参照を取得できます。

public function getNewInstance()
{
    $instance = parent::getNewInstance();

    if ($this->hasRequest()) {
        $branch = $this->getRequest()->get('branch', null);

        if ($branch !== null) {
            $entityManager = $this->getModelManager()->getEntityManager('MyBundle\Entity\Branch');
            $branchReference = $entityManager->getReference('MyBundle\Entity\Branch', $branch);

            $instance->setBranch($branchReference);
        }
    }
    return $instance;
}

ブログに例を追加しました: http://blog.webdevilopers.net/populate-resp-set-default-values-on-form-resp-object-or-instance-in-sonataadminbundle/ ==

5
webDEVILopers

ブール値の場合、別のオプションは、dataメソッドに渡される最初の配列内のadd値をconfigureFormFields内に設定することです。

したがって、いくつかの記憶の後、私のコード(デフォルトでチェックしたかったチェックボックスのコード)は次のようになりました。

protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper
        ->add('name')
        ->add('visible', null, ['label'=>'Visibility', 'data' => true ])
    ;
}

... getNewInstance()定義を削除できるため、ファイルの先頭に数行保存されました。

0
Patrick