Я понимаю, как передать переменную из контроллера в форму с помощью метода createForm
, но что, если мне нужно передать это значение форме, встроенной в форму, на которую я вызвал createForm ? Я никогда явно не называю createForm нигде во встроенной форме, так как я должен получить эту ценность? Стоит отметить, что значение, которое я пытаюсь передать, доступно через службу, но я не могу назвать $this->get('serviceName')->getValue()
потому что я не в контроллере. Для справки, вот как я получаю значение в родительской форме, обратите внимание, как я это делаю с помощью метода createForm , а не с контруктором:
//in a controller $form = $this->createForm(new FormType(), $formObject, array('value' => $value));
Это не потому, что вы не в контроллере, что не можете вводить сервисы (и параметры). Особенно в тех типах, где каждый тип может быть сервисом. Конечно, вы не можете сделать $this->get('serviceName')->getValue()
напрямую, потому что метод get
по умолчанию недоступен. Однако вы можете ввести услугу в свой тип формы. См. Другой вопрос, на который я ответил на инъекцию зависимости здесь для получения некоторой информации о том, как вводить услуги.
См. Этот раздел поваренной книги, в котором рассказывается, как преобразовать свой тип в службу, чтобы вы могли вводить свои зависимости и в то же время свою ценность.
Если по какой-либо причине вы не можете преобразовать свой тип в службу, то вам нужно передать ваши параметры FormType
которые будут их читать, и передать параметр value
встроенному типу. Это похоже на простую конструкцию стилей, вы передаете все свои параметры основному типу, который передаст некоторые из них для каждого подтипа, чем каждый из подтипов передаст их своим собственным подтипам и так далее. Опять же, вы можете взглянуть на этот [рецепт поваренной книги] на то, как читать параметры и использовать их в пользовательском типе формы.
В заключение я считаю, что проще превратить ваш тип в сервис.
Надеюсь, это поможет вам.
С Уважением,
Matt