0

我现在一直在使用 Symfony2(.3) 开发一个系统,但遇到了一个问题......我正在尝试构建一个应该发布到/register. 我该怎么做

$url = $this->generateUrl('register');或者$this->get('router')->generate('register');

在扩展 AbstractType 的类中?代码如下。

class RegistrationFormType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        parent::buildForm($builder, $options);

        $builder->setAction(/*I want the URL generated here*/)
                ->add('username', 'string')
                ->add('password', 'repeated', array(

                ))
                ->add('cellphone', 'text', array(
                    'max_length' => 10,
                    'invalid_message' => 'A phone number must be exactly 10 characters long',
                ));

    }

    public function setDefaultOptions(OptionsResolverInterface $resolver) {
        $resolver->setDefaults(array(
            'data_class' => 'MyBundle\MainBundle\Entity\SystemUser',
        ));
    }

    public function getName() {
        return 'user_registration';
    }
} 

我只是在这里错过了重点吗?我不应该这样做吗?我在 Google 上找不到任何有用的东西。

谢谢!

4

2 回答 2

3

您需要将router服务注入到您的RegistrationFormType.

将此添加到您的类型中,

use Symfony\Bundle\FrameworkBundle\Routing\Router;

class RegistrationFormType extends AbstractType
{    
    private $router;

    public function __construct(Router $router)
    {
       $this->router = $router;
    }
    // ...

然后,如果您已将类型定义为服务,则应按如下方式构建它(通过提供 @router 服务作为构造函数的参数),

services:
    form.type.user_registration:
        class: path_to_your_type/RegistrationFormType
        arguments: [ @router ]
        tags:
            - { name: form.type }

然后,您可以通过调用在您的类型中访问路由器的生成助手,

$this->router->generate('register');

此外,为了通过Dependency Injection Container构建您的类型,您必须使用,

$form = $this->createForm('user_registration', $systemUserInstance);

代替,

$form = $this->createForm(new RegistrationFormType(), $systemUserInstance);
于 2013-11-06T15:34:26.443 回答
1

如果您正在处理服务表单类型作为服务,您可以将路由器作为参数传递

acme.my_service:
    class: %acme.my_service.class%
    arguments: [ @router ]

然后将其添加到您的构造函数中

use Symfony\Component\Routing\Router;

class MyService
{
    protected $router;

    public function __construct(Router $router)
    {
        $this->router = $router;
    }
...
}

然后您可以使用 $this->router->generateUrl(...

它应该对表单类型起作用

于 2013-11-06T15:35:05.487 回答