传递参数给 Pimple->container->factory
Pass parameters to Pimple->container->factory
所以我基本上想这样做:
$this->container['Menu_builder'] = $this->container->factory(function ($c) {
return new Menu_builder($parameter_1, $parameter_2);
});
其中 $parameter_1
和 $parameter_2
从调用中传入,如下所示:
$menu_builder = $this->container['Menu_builder']('account', 'reset_password');
我知道上面的语法不正确,但我想将这些字符串传递到对 $this->container->factory
的调用中。
这可能吗?
例如,如果我想从各种控制器函数实例化 Menu_builder,每个控制器函数具有不同的参数。
您可以使用 use()
将您的变量传递给匿名函数,例如
//your parameters needs to be defined here:
$parameter_1 = "XY";
$parameter_2 = 42;
$this->container['Menu_builder'] = $this->container->factory(function ($c)use($parameter_1, $parameter_2) {
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See here
return new Menu_builder($parameter_1, $parameter_2);
});
FWIW,您还可以在容器中包含一个匿名函数。
$this->container['Menu_builder'] = function() {
// do stuff here
return function($parameter_1, $parameter_2) {
return new Menu_builder($parameter_1, $parameter_2);
};
};
这样使用:
$localfunc = $this->container['Menu_builder'];
$result = $localfunc($parameter_1, $parameter_2);
请注意,在本例中我没有使用工厂。那是因为你可以每次执行不同值的匿名函数。
所以我基本上想这样做:
$this->container['Menu_builder'] = $this->container->factory(function ($c) {
return new Menu_builder($parameter_1, $parameter_2);
});
其中 $parameter_1
和 $parameter_2
从调用中传入,如下所示:
$menu_builder = $this->container['Menu_builder']('account', 'reset_password');
我知道上面的语法不正确,但我想将这些字符串传递到对 $this->container->factory
的调用中。
这可能吗?
例如,如果我想从各种控制器函数实例化 Menu_builder,每个控制器函数具有不同的参数。
您可以使用 use()
将您的变量传递给匿名函数,例如
//your parameters needs to be defined here:
$parameter_1 = "XY";
$parameter_2 = 42;
$this->container['Menu_builder'] = $this->container->factory(function ($c)use($parameter_1, $parameter_2) {
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ See here
return new Menu_builder($parameter_1, $parameter_2);
});
FWIW,您还可以在容器中包含一个匿名函数。
$this->container['Menu_builder'] = function() {
// do stuff here
return function($parameter_1, $parameter_2) {
return new Menu_builder($parameter_1, $parameter_2);
};
};
这样使用:
$localfunc = $this->container['Menu_builder'];
$result = $localfunc($parameter_1, $parameter_2);
请注意,在本例中我没有使用工厂。那是因为你可以每次执行不同值的匿名函数。