Создайте форму как услугу в Symfony2

То, что я хотел бы сделать с любого контроллера:

$register = $this->get('register_manager'); return $this->render( 'AcmeUserBundle:Account:register.html.twig', array( 'form' => $register->getRegistrationForm(), ) ); 

И в моем шаблоне

 <form> {{ form_widget(form) }} </form> 

Вот как я уже установил

В моем Acme/UserBundle/Resources/config/services.yml меня есть

 parameters: register_manager.class: Acme\UserBundle\Manager\RegisterManager services: register_manager: class: %register_manager.class% arguments: [@form.factory] 

В RegisterManager.php меня есть

 namespace Acme\UserBundle\Manager; use Acme\UserBundle\Form\Type\RegistrationType; use Symfony\Component\Form\FormFactoryInterface; class RegisterManager { protected $formFactory; public function __construct(FormFactoryInterface $formFactory) { $this->formFactory = $formFactory; } public function getRegistrationForm() { return $this->formFactory->createBuilder(new RegistrationType()); } } 

И в Acme\UserBundle\Form\Type\RegistrationType меня есть:

 namespace Acme\UserBundle\Form\Type; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilder; class RegistrationType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $builder->add('username','text'); $builder->add('email','email'); $builder->add('password','password'); } public function getDefaultOptions(array $options) { return array( 'data_class' => 'Acme\UserBundle\Entity\User', ); } public function getName() { return 'registration'; } } 

Я знаю, что RegistrationType() работает так же, как и в контроллере. Моя проблема заключается в настройке RegisterManager как службы, я не могу получить нужные компоненты там, и я не уверен, где искать.

Кажется, вы почти там. Чтобы получить объект Form из вашей службы, вы должны использовать FormFactoryInterface::create() вместо FormFactoryInterface::createBuilder()

Причина, почему $this->createForm() работает в контроллерах, состоит в том, что каждый контроллер расширяет базовый контроллер , что происходит для реализации этого метода.

Я обнаружил, что моя способность IDE очень полезно ссылаться на определенные файлы Symfony, и я предлагаю вам использовать их, если вы уже этого не сделали. Также есть репозиторий git, который вы можете найти здесь .