【发布时间】:2011-12-27 18:37:01
【问题描述】:
我希望能够从任何控制器做的是:
$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 设置为服务,我无法在其中获得正确的组件,我不知道去哪里找。
【问题讨论】:
-
您遇到的具体问题是什么? “无法在其中获得正确的组件”是什么意思?现在它应该可以按预期工作了。
-
现在,在我的 RegistrationManager 服务中,我需要能够调用
createForm(new RegistrationType())并将其返回以便控制器能够将其传递给模板,但我不确定createForm()的位置已定义以及如何使其在此服务类中可用。在 Symfony Forms 文档中,它的访问方式类似于$this->createForm(),但我将如何在我的服务类中做到这一点?我不认为这是FormFactoryInterfacesymfony.com/doc/current/book/forms.html#creating-form-classes的一部分 -
FOSUserBundle直接使用form.factory服务,不需要RegisterManager类,看看github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/…
-
查看这篇文章,它准确地解释了如何将您的表单注册为服务。 webtipblog.com/define-a-symfony-2-form-as-a-service