我的目标是将自定义选项传递给验证器,就像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;
}
简而言之,创作选择会在那里进行,但它们从未被传递过。什么是最好的解决方案?
答案 0 :(得分:0)
将我的头撞在墙上很长一段时间之后,我才刚刚在源头找到了解决方案。您必须使工厂实施Zend\ServiceManager\MutableCreationOptionsInterface
然后你可以使用它传递的任何东西来实例化"接下来的东西"。感觉像官方的创可贴嘿嘿,但它确实有效。
希望这有帮助。