Передайте параметры фабрике Pimple-> container->

Поэтому я в основном хочу сделать это:

$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 из различных функций контроллера с разными параметрами для каждой функции контроллера.

3

Решение

Вы просто можете использовать 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);
});
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);

Обратите внимание, что в этом случае я не использую фабрику. Это потому, что вы можете каждый раз выполнять анонимную функцию с разными значениями.

2

По вопросам рекламы [email protected]