Zend framework ZF2在运行时向工厂传递参数

Zend framework ZF2在运行时向工厂传递参数,zend-framework,zend-framework2,Zend Framework,Zend Framework2,在ZF2中,我有一个多检查盒工厂(简化) 我希望multicheckbox根据映射程序的findText()方法中的$resultFromQuery呈现不同的内容 我想把一个变量传递给\u调用(FormElementManager$FormElementManager$someText)。但问题是,当我从服务管理器调用multicheckbox时,如下所示: $element = $formElementManager->get('Path\To\Factory\Alias\Multich

在ZF2中,我有一个多检查盒工厂(简化)

我希望multicheckbox根据映射程序的
findText()
方法中的
$resultFromQuery
呈现不同的内容

我想把一个变量传递给
\u调用(FormElementManager$FormElementManager$someText)
。但问题是,当我从服务管理器调用multicheckbox时,如下所示:

$element = $formElementManager->get('Path\To\Factory\Alias\Multicheckbox');

我不知道如何传递额外的变量。有任何帮助吗?

请查看
mutableCreationOptions接口
,这允许您的工厂接收通过serviceManager
get()
方法传递的运行时选项

use Zend\ServiceManager\MutableCreationOptionsInterface;
use Zend\ServiceManager\MutableCreationOptionsTrait;

class MultiCheckboxFactory implements MutableCreationOptionsInterface
{
    use MutableCreationOptionsTrait;

    public function __invoke(FormElementManager $formElementManager)
    {
        $options = $this->getCreationOptions();

        var_dump($options);

        $multiCheck = new MultiCheckbox();

        ....
    }
}
现在,您可以传递选项:

$element = $formElementManager->get('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);

查看
mutableCreationOptions接口
,这允许您的工厂接收通过serviceManager
get()
方法传递的运行时选项

use Zend\ServiceManager\MutableCreationOptionsInterface;
use Zend\ServiceManager\MutableCreationOptionsTrait;

class MultiCheckboxFactory implements MutableCreationOptionsInterface
{
    use MutableCreationOptionsTrait;

    public function __invoke(FormElementManager $formElementManager)
    {
        $options = $this->getCreationOptions();

        var_dump($options);

        $multiCheck = new MultiCheckbox();

        ....
    }
}
现在,您可以传递选项:

$element = $formElementManager->get('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);

更新:
MutableCreationOptionsTrait
在ZF3中不再可用:

现在最简单的方法似乎是

$element = $formElementManager->build('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);

虽然每次都会给您一个离散(非共享)实例。

更新:
MutableCreationOptionsTrait
在ZF3中不再可用:

现在最简单的方法似乎是

$element = $formElementManager->build('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);

虽然每次都会给您一个离散(非共享)实例。

+1对于
使用MutableCreationOptionsTrait
:现在我不必为
使用MutableCreationOptionsTrait的
$createOptions
+1编写访问器:现在我不必为
$createOptions
编写访问器。很抱歉响应太慢。据我理解,“共享”是默认值。因此,一个常规的$container->get('whatever')调用会为您提供一个共享实例,但正是由于这个原因,您不能像使用build()一样向它传递任何构造函数选项。很抱歉响应太慢。据我理解,“共享”是默认值。因此,一个常规的$container->get('whatever')调用将为您提供一个共享实例,但正是出于这个原因,您不能像使用build()一样向它传递任何构造函数选项。