自定义验证器的抽象工厂 - 丢弃的选项?

时间:2014-04-14 16:45:58

标签: php zend-framework2

我的目标是将自定义选项传递给验证器,就像ZF2提供的验证器所做的那样。考虑这个验证器配置:

'filters' => array( 'leaderboard' => array( 'required' => true, 'filters' => array( array('name' => 'stringtrim'), ), 'validators' => array( array( 'name' => '\LDP\Form\Validator\UniqueAtom', 'options' => array( 'key' => 'foo', ), ), ), ), ),

在这种情况下,我的验证器由一个抽象工厂提供,该工厂在我的应用程序的getValidatorConfig()中指定。但是,从AbstractPluginManager中的第95行来看,这个函数序列忽略了创建选项:

public function get($name, $options = array(), $usePeeringServiceManagers = true)
{
    // Allow specifying a class name directly; registers as an invokable class
    if (!$this->has($name) && $this->autoAddInvokableClass && class_exists($name)) {
        $this->setInvokableClass($name, $name);
    }

    $this->creationOptions = $options;
    $instance = parent::get($name, $usePeeringServiceManagers);
    $this->creationOptions = null;
    $this->validatePlugin($instance);
    return $instance;
}

简而言之,创作选择会在那里进行,但它们从未被传递过。什么是最好的解决方案?

1 个答案:

答案 0 :(得分:0)

将我的头撞在墙上很长一段时间之后,我才刚刚在源头找到了解决方案。您必须使工厂实施Zend\ServiceManager\MutableCreationOptionsInterface

然后你可以使用它传递的任何东西来实例化"接下来的东西"。感觉像官方的创可贴嘿嘿,但它确实有效。

希望这有帮助。