2012-05-11 2 views
17

как я могу установить значение по умолчанию в сонатных админах пачки опция данных отсутствует в методе configureFormFieldsнастройки по умолчанию в Symfony2 сонатных админ пачки

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

, как можно использовать данные атрибуты, чтобы установить значение по умолчанию внутри поля ?? ?

+0

Что такое fieldType для имени? – Amit

ответ

41

Я полагаю, вы, вероятно, уже решили эту проблему сейчас, но в качестве ссылки на кого-либо еще вы можете переопределить метод getNewInstance() и установить значение по умолчанию на объекте:

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

    return $instance; 
} 
+0

Именно то, что я искал. Благодаря! – Matheno

+0

@RobMasters Что делать, если атрибут, который нам нужно отображать, на самом деле является методом? – smarber

4

вы также можете присвоить значение по умолчанию свойства объекта непосредственно:

class TheEntity 
{ 
    private $name = 'default name'; 
} 
+0

Почему этот ответ проголосовали? Он работает и включает в себя наименее переопределяющий код поставщика. Лучший ответ imho. – FallenSquirrel

+0

@FallenSquirrel это работа, но я думаю, что это не желаемое решение, поскольку OP, вероятно, хочет, чтобы решение было выполнено в Sonata и не хотело касаться свойства класса. – GusDeCooL

5

в дополнении к @RobMasters решения:

Если вы хотите установить отношение вы можете получить справку из эн titymanager (вместо полного объекта):

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/

+0

Так что, если этот 11 не может быть жестко закодирован? – aderuwe

+0

Где будет идентификатор «11»? – webDEVILopers

+0

Да, мой вопрос точно. – aderuwe

0

Для булевы, другой вариант, чтобы установить значение data в пределах первого массива, переданного в ваш метод add , внутри configureFormFields

Таким образом, после некоторого memtoring, мой код (для флажка, который я хотел бы проверил по умолчанию) в конечном итоге выглядеть примерно так:

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

... который сохранил несколько строк в верхней части моего файла, так как тогда я мог бы избавиться от определения getNewInstance().

 Смежные вопросы

  • Нет связанных вопросов^_^