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 }

次に、 Type を呼び出してルーターの生成ヘルパーにアクセスできる場合があります。

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

また、 Dependency Injection Containerを使用して Type を構築するには、次を使用する必要があります。

$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(... を使用して URL を生成できます。

フォームタイプでも同じように機能するはずです

于 2013-11-06T15:35:05.487 に答える