9

依存性注入を使用してバリデーターを通常のクラスに注入する方法を誰かに教えてもらえますか?

私のコントローラーには:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Form;

class FormController extends Controller {
    public function indexAction()
    {
        $form = new Form();
        $email = $request->request->get('email');
        $valid = $form->isValid($email);
    }
}

このカスタムクラスを使用したいのですが、バリデーターにアクセスできる必要があります。

class Form {
    public function isValid($value)
    {
        // This is where I fail
        $validator = $this->get('validator'); 
        ... etc
    }
}
4

4 に答える 4

14

これを行うには、カスタムクラスをサービスとして定義する必要があり、$form = $this->get('your.form.service');直接インスタンス化するのではなく、を使用してコントローラーからアクセスします。

サービスを定義するときは、必ずバリデーターサービスを挿入してください。

your.form.service:
    class: Path\To\Your\Form
    arguments: [@validator]

次に、Formサービスのconstructメソッドでこれを処理する必要があります。

/**
 * @var \Symfony\Component\Validator\Validator
 */
protected $validator;

function __construct(\Symfony\Component\Validator\Validator $validator)
{
    $this->validator = $validator;
}
于 2012-09-17T16:07:20.207 に答える
0

Form クラスは ContainerAware (Symfony\Component\DependencyInjection\ContainerAware) から継承できます。次に、コンテナにアクセスできるようになり、次のようにバリデータ サービスを取得できるようになります。

$validator = $this->container->get('validator');
于 2012-09-17T16:14:05.200 に答える