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

2 ответа

Решение

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

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

Другие вопросы по тегам