php - 在 Symfony2 中创建一个表单作为服务

标签 php symfony

我希望能够从任何 Controller 执行的操作是:

$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() 的工作方式与我在 Controller 中使用的一样。我的问题是将 RegisterManager 设置为服务,我无法在其中找到正确的组件,而且我不确定到哪里查找。

最佳答案

看来你快到了。要从您的服务中获取 Form 对象,您应该使用 FormFactoryInterface::create()而不是 FormFactoryInterface::createBuilder()

$this->createForm() 在 Controller 中工作的原因是因为每个 Controller 都扩展了 base controller ,恰好实现了这个方法。

我发现我的 IDE 链接到特定 Symfony 文件的能力非常有用,我建议你使用一个,如果你还没有的话。还有一个 git 存储库,您可以在其中找到 here .

关于php - 在 Symfony2 中创建一个表单作为服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8107179/

相关文章:

symfony - 学说2 - 如何使用 DATE_ADD 函数

php - 使用自定义查询生成器的多对多实体的 Symfony 表单

php - Symfony3 尝试使用表单和 Twig 保存到数据库中

php - bbcode 到 vbulletin 中的 html

php - 如何强制用于路由的.htaccess不路由.css、.js、.jpg等文件?

php - 如何获取具有受影响行数的列的总和

php - Doctrine2 一对多/多对一关系给出重复记录

symfony - 使用 Symfony 2.1 和 Doctrine 2 对同一实体类型进行多个 COUNT 查询

php - 如何计算每个簇的变异系数值? - PHP MYSQL

php - "session_regenerate_id(): Cannot regenerate session id - headers already sent"如何解决