我希望能从任何控制器做的是:
$register = $this->get('register_manager');
return $this->render(
'AcmeUserBundle:Account:register.html.twig',
array(
'form' => $register->getRegistrationForm(),
)
);
Run Code Online (Sandbox Code Playgroud)
在我的模板中
<form>
{{ form_widget(form) }}
</form>
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的设置方式
在我的Acme/UserBundle/Resources/config/services.yml
我
parameters:
register_manager.class: Acme\UserBundle\Manager\RegisterManager
services:
register_manager:
class: %register_manager.class%
arguments: [@form.factory]
Run Code Online (Sandbox Code Playgroud)
在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());
}
}
Run Code Online (Sandbox Code Playgroud)
在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';
}
}
Run Code Online (Sandbox Code Playgroud)
我知道RegistrationType()
我在控制器中有它的作品.我的问题是设置RegisterManager
为服务,我无法在那里获得正确的组件,我不知道在哪里看.
gil*_*den 20
看起来你几乎就在那里.要从服务中获取Form对象,您应该使用FormFactoryInterface::create()
而不是FormFactoryInterface::createBuilder()
$this->createForm()
在控制器中工作的原因是因为每个控制器都在扩展基本控制器,这恰好实现了这种方法.
我发现我的IDE能够链接到特定的Symfony文件非常有用,我建议你使用一个,如果你已经没有.还有一个git存储库,你可以在这里找到它.
归档时间: |
|
查看次数: |
19614 次 |
最近记录: |