0

我的输入过滤器:

namespace FarmAccounts\InputFilter;

use Zend\InputFilter\InputFilter;

class Account extends InputFilter
{
    public function init()
    {
        $factory = $this->getFactory();

        $owner = $factory->createInput(array(
            'name' => 'owner',
            'required' => true,
            'validators' => array(
                array(
                    'name' => 'DoctrineModule\Validator\NoObjectExists',
                    'options' => array(
                        'object_repository' => $entityManager->getRepository('OAuth2Server\Entity\User'),
                        'fields' => 'id'
                    )
                )
            )
        ));
        $this->add($owner);
    }
}

然后当我需要这个过滤器时,我调用:

$filter = $this->serviceManager->get('InputFilterManager')
             ->get('FarmAccounts\InputFilter\Account');

如您所见$entityManager,未在任何地方定义,这就是我的问题,我不知道如何在此处添加它。InputFilter 没有服务定位器。也许有一种方法可以为 inputfitler 创建工厂?

更新:

我试图实现ServiceLocatorAwareInterface,但由于它没有通过服务管理器,所以它没有设置。

4

1 回答 1

0

看起来我设法解决了我的问题

工厂:

namespace FarmAccounts\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use FarmAccounts\InputFilter\Account as AccountInputFilter;

class AccountInputFilterFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $input_filter = new AccountInputFilter;

        $entityManager = $serviceLocator->getServiceLocator()->get('Doctrine\ORM\EntityManager');

        $input_filter->setEntityManager($entityManager);

        return $input_filter;
    }
}

和 module.config.php:

'input_filters' => array(
    'factories' => array(
        'FarmAccounts\InputFilter\Account' => 'FarmAccounts\Factory\AccountInputFilterFactory',
    ),
),
于 2013-10-25T07:09:32.833 回答