Поэтому я в основном хочу сделать это:
$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);
Обратите внимание, что в этом случае я не использую фабрику. Это потому, что вы можете каждый раз выполнять анонимную функцию с разными значениями.