Я использовал команду ./app/console generate:doctrine:crud
и заметил, как он создал новые методы в моем контроллере: "createCreateForm", "createEditForm" и "createDeleteForm". Есть ли способ создать эти формы crud внутри одного FormType?
Когда мы смотрим на сгенерированный метод createEditForm
, он выглядит так:
private function createEditForm(MyEntity $entity)
{
$form = $this->createForm(new FormType(), $entity, array(
'action' => $this->generateUrl('MyEntity_update', array('id' => $entity->getId())),
'method' => 'PUT',
));
$form->add('submit', 'submit', array('label' => 'Update'));
return $form;
}
Метод buildForm
в FormType
.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('description')
->add('save', 'submit')
;
}
Есть ли более эффективная практика, например, передача параметров непосредственно методу buildForm?
Вы можете использовать FormTypeInterface#setDefaultOptions
:
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'method' => 'PUT',
));
}
Вы не должны делать это с помощью опции действия, как то, что должно быть определено вашим контроллером. Тип формы не должен знать о архитектуре URL вашего приложения.
Они должны оставаться здесь, помните, что symfony2 использует шаблон mvc, поэтому сущности вашего приложения не должны содержать код, связанный с представлениями или контроллерами.