То, что я хотел бы сделать с любого контроллера:
$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, который вы можете найти здесь .