3

デフォルトの FOSUserBundle フォームをオーバーライドするために、symfony 2.1 の公式ドキュメントを使用しています。しかし、フォーム ハンドラーをオーバーライドしようとすると、次のエラーが発生します。

InvalidArgumentException: サービス定義「test_user.form.handler.registration」が存在しません。

ファイルのリスト:

<?php

// src/Test/UserBundle/Form/Handler/RegistrationFormHandler.php

namespace Test\UserBundle\Form\Handler;

use FOS\UserBundle\Form\Handler\RegistrationFormHandler as BaseHandler;
use FOS\UserBundle\Model\UserInterface;

class RegistrationFormHandler extends BaseHandler
{
    protected function onSuccess(UserInterface $user, $confirmation)
    {
        // logic here...
        parent::onSuccess($user, $confirmation);
    }
}

=-=-=-=-=

# src/Test/UserBundle/Resources/config/services.yml
services:
    test_user.form.handler.registration:
        class: Test\UserBundle\Form\Handler\RegistrationFormHandler
        arguments: ["@fos_user.registration.form", "@request", "@fos_user.user_manager", "@fos_user.mailer", "@fos_user.util.token_generator"]
        scope: request
        public: false

=-=-=-=-=

# app/config/config.yml
fos_user:
    db_driver: orm
    firewall_name: dev
    user_class: Test\UserBundle\Entity\User
    registration:
        form:
            handler: test_user.form.handler.registration

PS はい、同様の質問を読みましたが、同じ問題はありません。

4

2 に答える 2

0

問題は簡単でした。UnserBundle手動で作成したため、という名前のフォルダーDependencyInjectionは作成されていません。このフォルダーには、サービス構成をロードする php ファイルが含まれています。

于 2012-12-07T11:41:05.110 に答える
0

の最後の行をよく見てくださいservices.ymlpublic: falseつまり、このサービスはコードからアクセスできません ( Advanced Container Configurationを参照)。の値を に変更publicするtrueか、デフォルト値が であるため、行を削除しますtrue

于 2012-12-06T19:37:12.810 に答える