lo que me gustaría ser capaz de hacer desde cualquier controlador es:Crear un formulario como un servicio en Symfony2
$register = $this->get('register_manager');
return $this->render(
'AcmeUserBundle:Account:register.html.twig',
array(
'form' => $register->getRegistrationForm(),
)
);
Y en mi plantilla
<form>
{{ form_widget(form) }}
</form>
Así es como he puesto hasta ahora
En mi Acme/UserBundle/Resources/config/services.yml
que tienen
parameters:
register_manager.class: Acme\UserBundle\Manager\RegisterManager
services:
register_manager:
class: %register_manager.class%
arguments: [@form.factory]
En RegisterManager.php
tengo
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());
}
}
Y en Acme\UserBundle\Form\Type\RegistrationType
tengo:
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';
}
}
sé los RegistrationType()
obras que yo he tenido en un controlador. Mi problema es configurar RegisterManager
como un servicio, no puedo obtener los componentes correctos allí y no estoy seguro de dónde buscar.
¿Cuál es exactamente el problema que está encontrando? ¿A qué te refieres con "no se pueden obtener los componentes correctos allí"? En este momento, debería funcionar como se esperaba. – gilden
ahora mismo, en mi servicio RegistrationManager necesito poder llamar '' 'createForm (new RegistrationType())' '' y devolverlo para que el controlador pueda pasarlo a la plantilla, pero no estoy seguro de dónde '' 'createForm()' '' está definido y cómo hacer que esté disponible en esta clase de servicio. En la documentación de Symfony Forms se accede como '' '$ this-> createForm()' '' pero ¿cómo haré eso en mi clase de servicio? No creo que forme parte de '' 'FormFactoryInterface''' http://symfony.com/doc/current/book/forms.html#creating-form-classes – ed209
FOSUserBundle utiliza el servicio form.factory directamente sin el necesita una clase de RegisterManager, compruébelo, https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/config/profile.xml – solarc