Quello che mi piacerebbe essere in grado di fare da qualsiasi controller è:Creare un modulo come un servizio in Symfony2
$register = $this->get('register_manager');
return $this->render(
'AcmeUserBundle:Account:register.html.twig',
array(
'form' => $register->getRegistrationForm(),
)
);
E nel mio modello
<form>
{{ form_widget(form) }}
</form>
Ecco come ho impostato fino ad oggi
Nel mio Acme/UserBundle/Resources/config/services.yml
devo
parameters:
register_manager.class: Acme\UserBundle\Manager\RegisterManager
services:
register_manager:
class: %register_manager.class%
arguments: [@form.factory]
In RegisterManager.php
ho
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());
}
}
E in Acme\UserBundle\Form\Type\RegistrationType
ho:
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';
}
}
So che le RegistrationType()
opere come ho avuto in un controller. Il mio problema è con la creazione di RegisterManager
come servizio, non riesco a ottenere i componenti giusti lì e non sono sicuro dove cercare.
Qual è esattamente il problema che stai incontrando? Cosa intendi per "non è possibile ottenere i componenti giusti"? In questo momento dovrebbe funzionare come previsto. – gilden
in questo momento, nel mio servizio di RegistrationManager devo essere in grado di chiamare '' 'createForm (new RegistrationType())' '' e restituire che per il controller sia in grado di passarlo al template ma non sono sicuro di dove '' 'createForm()' '' è definito e come renderlo disponibile in questa classe di servizio. Nella documentazione di Symfony Forms si accede come '' '$ this-> createForm()' '' ma come dovrei farlo nella mia classe di servizio? Non penso che faccia parte di '' 'FormFactoryInterface''' http://symfony.com/doc/current/book/forms.html#creating-form-classes – ed209
FOSUserBundle utilizza direttamente il servizio form.factory senza hai bisogno di una classe di RegisterManager, dai un'occhiata, https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/config/profile.xml – solarc