2016-05-03 5 views
9

С Symfony 2.7 вы можете настроить имя формы в своем классе EntityType с помощью метода getName()
Это теперь устарело. Есть ли другой способ сделать это с помощью Symfony 3.0?
У меня есть собственный прототип entry_rows для коллекций, которые мне нужно использовать в разных формах.
Поскольку имя строк основано на имени формы, мне нужно будет изменить позже, чтобы использовать их в другой форме.Symfony3: можно ли изменить название формы?

+0

Я не думаю, что это хорошая идея, чтобы полагаться на имя пользовательской формы. Почему вы не можете менять свои коллекции? Я много использую коллекции, но я не сталкивался с этой проблемой. –

+0

@StephanVierkant Почему это плохая идея? Если вы знаете какую-то проблему, это может привести, скажите, пожалуйста, как я собираюсь использовать ответ Маттео. Я не хочу менять свои коллекции, потому что у меня две формы: formA с полем myCollection и formB, у которого также есть поле myCollection. Поэтому в моей прототипе пользовательской формы, если я пишу блок вроде _formA_myCollection_entry_row, он не будет распознан, когда я вызову свою форму Б, потому что на этот раз он будет называться _formB_myCollection_entry_row. Надеюсь, я понятен ... – Roubi

ответ

13

Вы должны использовать метод getBlockPrefix вместо getName, как описано в руководстве по миграции here.

В качестве примера:

/** 
* Returns the prefix of the template block name for this type. 
* 
* The block prefix defaults to the underscored short class name with 
* the "Type" suffix removed (e.g. "UserProfileType" => "user_profile"). 
* 
* @return string The prefix of the template block name 
*/ 
public function getBlockPrefix() 
{ 
    return "form_name"; 
} 

Надеется, что это поможет

+0

Это именно то, что мне нужно! Вы решили мою проблему! Я не знал, что имя формы теперь называется blockPrefix, вот чего я не нашел в официальном документе. Спасибо за ссылку на руководство по миграции, я попытаюсь взглянуть на нее в следующий раз, когда я ищу функциональность до 3.0. – Roubi

9

В зависимости от того, как ваша форма построена, существуют различные способы задать имя вашей формы.

Если вы создаете форму через $this->createForm(CustomType::class):

$formFactory = $this->get('form.factory'); 
$form = $formFactory->createNamed('custom_form_name', CustomType::class); 

Если вы строите форму от контроллера непосредственно через $this->createFormBuilder():

$formFactory = $this->get('form.factory'); 
$form = $formFactory->createNamedBuilder('custom_form_name', CustomType::class); 

Посмотрите на FormFactory и FormBuilder API, для получения дополнительной информации ,

+0

Спасибо за ваш ответ, я выбрал Маттео, потому что он более подходит для моих конкретных потребностей, но я уверен, что ваш будет полезен для кого-то другого. – Roubi

+0

@Roubi И ты совершенно прав, это точно соответствует твоей проблеме – chalasr

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