ZF2 在运行时将参数传递给工厂
ZF2 passing arguments to factories at runtime
在 ZF2 中,我有一个用于多选框的工厂(简化)
class MultiCheckboxFactory
{
public function __invoke(FormElementManager $formElementManager)
{
$multiCheck = new MultiCheckbox();
$serviceManager = $formElementManager->getServiceLocator();
$mapper = $serviceManager->get('Path\To\The\Mapper\SomeMapper');
$resultFromQuery = $mapper->findText('text');
// further setting up of the multicheckbox based on $resultFromQuery
return $multiCheck;
}
}
我希望多选框根据来自映射器 findText()
方法的 $resultFromQuery
呈现不同的内容。
我想传递一个变量给 __invoke(FormElementManager $formElementManager, $someText)
。但问题是,当我像这样从服务管理器调用多选框时:
$element = $formElementManager->get('Path\To\Factory\Alias\Multicheckbox');
我不知道如何传递附加变量。有帮助吗?
看看 MutableCreationOptionsInterface
,这允许您的工厂接收您通过 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 中不再可用:https://docs.zendframework.com/zend-servicemanager/migration/#miscellaneous-interfaces-traits-and-classes
现在最简单的方法似乎是
$element = $formElementManager->build('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);
虽然这每次都会给你一个离散的(非共享的)实例。
在 ZF2 中,我有一个用于多选框的工厂(简化)
class MultiCheckboxFactory
{
public function __invoke(FormElementManager $formElementManager)
{
$multiCheck = new MultiCheckbox();
$serviceManager = $formElementManager->getServiceLocator();
$mapper = $serviceManager->get('Path\To\The\Mapper\SomeMapper');
$resultFromQuery = $mapper->findText('text');
// further setting up of the multicheckbox based on $resultFromQuery
return $multiCheck;
}
}
我希望多选框根据来自映射器 findText()
方法的 $resultFromQuery
呈现不同的内容。
我想传递一个变量给 __invoke(FormElementManager $formElementManager, $someText)
。但问题是,当我像这样从服务管理器调用多选框时:
$element = $formElementManager->get('Path\To\Factory\Alias\Multicheckbox');
我不知道如何传递附加变量。有帮助吗?
看看 MutableCreationOptionsInterface
,这允许您的工厂接收您通过 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 中不再可用:https://docs.zendframework.com/zend-servicemanager/migration/#miscellaneous-interfaces-traits-and-classes
现在最简单的方法似乎是
$element = $formElementManager->build('Path\To\Factory\Alias\Multicheckbox', ['foo' => 'bar']);
虽然这每次都会给你一个离散的(非共享的)实例。