2

私は現在、Doctrine 2のものを使用しており、ObjectExists.phpやのような検証のためにDoctrineモジュールに着陸しましたNoObjectExists.php

私の質問は、ここにある元のコードからです。

    /**
     * Constructor
     *
     * @param array $options required keys are `object_repository`, which must be an instance of
     * Doctrine\Common\Persistence\ObjectRepository, and `fields`, with either
     * a string or an array of strings representing the fields to be matched by the validator.
     * @throws \Zend\Validator\Exception\InvalidArgumentException
     */
    public function __construct(array $options)
    {
        if (!isset($options['object_repository']) || !$options['object_repository'] instanceof ObjectRepository) {
            if (!array_key_exists('object_repository', $options)) {
                $provided = 'nothing';
            } else {
                if (is_object($options['object_repository'])) {
                    $provided = get_class($options['object_repository']);
                } else {
                    $provided = getType($options['object_repository']);
                }
            }

            throw new Exception\InvalidArgumentException(sprintf(
                'Option "object_repository" is required and must be an instance of'
                    . ' Doctrine\Common\Persistence\ObjectRepository, %s given',
                $provided
            ));
        }

        $this->objectRepository = $options['object_repository'];

        if (!isset($options['fields'])) {
            throw new Exception\InvalidArgumentException(
                'Key `fields` must be provided and be a field or a list of fields to be used when searching for'
                    . ' existing instances'
            );
        }

        $this->fields = $options['fields'];
        $this->validateFields();

        parent::__construct($options);
    }

ここで「必要なキーは、のインスタンスである必要がありますと記載されているという事実を理解できません。$optionsobject_repositoryDoctrine\Common\Persistence\ObjectRepository

はインターフェイスなのでDoctrine\Common\Persistence\ObjectRepository、そのステートメントをどのようにデコードする必要がありますか?

または、言い換えると、このObjectsExistsクラスのコンストラクターを呼び出してobject_repository、のインスタンスである必要があるを渡すにはどうすればよいDoctrine\Common\Persistence\ObjectRepositoryですか?

誰かがこれに光を当てることができますか、私はこのことを始めていますので、私の質問に厳しくしないでください。

ありがとう

4

2 に答える 2

1

はインターフェイスであるためDoctrine\Common\Persistence\ObjectRepository、インスタンス化することはできませんが、実装することはできます。

class MyObjectRepository implements Doctrine\Common\Persistence\ObjectRepository
{
    // ...
}

これで、 のすべてのインスタンスがMyObjectRepositoryobject_repository要件を満たしますObjectsExists

new ObjectsExists(array(
    'object_repository' => new MyObjectRepository(),
    // ...
));

についての詳細instanceof:

instanceofPHP 変数が特定のクラスのインスタンス化されたオブジェクトであるかどうかを判断するために使用されます。

instanceofまた、変数が親クラスから継承するクラスのインスタンス化されたオブジェクトであるかどうかを判断するためにも使用できます。

instanceofまた、変数がインターフェイスを実装するクラスのインスタンス化されたオブジェクトであるかどうかを判断するためにも使用できます。

于 2012-09-07T15:10:14.743 に答える
0

Doctrine\Common\Persistence\ObjectRepository を実装する最も一般的なクラスは Doctrine\ORM\EntityRepository です。

したがって、Doctrine ORM を使用している場合、object_repository オプションは UserRepository のようなものにする必要があります (明示的に定義されているか、単に一般的なものから返されます$em->getRepository('User')) 。

明示的に定義されていない理由は、[No]ObjectExists バリデーターが DoctrineORMModule ではなく、DoctrineModule だけにあるためです。したがって、ORM を使用していない場合は、ObjectRepository を実装する独自の UserRepository クラスを作成するだけで済みます。

于 2012-09-09T21:29:43.193 に答える