我试图设置一个PHP Slim应用程序(与我的问题没有直接关系),我想要一个更好的方法将路由的依赖关系传递给我的路由功能。例如,以下内容可以正常工作:
$app = new \Slim\Slim();
$testMessage = 'This is a test';
$app->get('/hello', function () use ($testMessage) {
echo $testMessage; //output: This is a test
});
但是我也试图使用Pimple(依赖注入)来创建一个我可以引用的数组。我并没有将整个数组传递给我的路径,而是仅传递我需要的对象/服务(使代码更易于维护)。例如:
$app = new \Slim\Slim();
$container = new Container();
$container['test'] = function ($c) {
return new Test();
};
$app->get('/hello', function () use ($container['test']) { //I get a syntax error on this line
var_dump($container['test']);
});
我可以"使用"整个$container
,但随后我将容器中的所有内容传递给路径,即使我只需要一个对象。在尝试调试时,我发现我可以传递任何看起来像这样的变量:$simple
,它可以包含整个数组或对象,但是我不能使用对象属性($Test->value
)或数组中的单个值($array['value']
),除非我添加了重新分配这些值的额外样板:
$Test = $container['test'];
$app->get('/hello', function () use ($Test) {
var_dump($Test); //everything works fine
});
但是我在路线范围之外创造了额外的物品,当然这可能会变得混乱。
有人可以告诉我是否可以通过use
$container['test']
关闭,或提供任何建议?
答案 0 :(得分:1)
我建议传递整个容器对象。它只会产生很少的额外开销(只是一个新的引用),而且你不会创建额外的无范围变量。如果需要,它还允许您添加依赖项。