我如何定义一个全局变量,以便我的current_user方法可以工作,我想要它,我只需要检查是否有当前用户,我的示例代码在下面
if (isset($_SESSION['company_id'])) {
$current_user = Companies::find($_SESSION['company_id']);
}
else
{
$current_company = null;
}
我如何使用当前的用户方法,无需将其传递给我的app->render()
方法,就像我的header.html
{% if current_user %}
hi {{current_user.name}}
{% endif %}
答案 0 :(得分:6)
答案 1 :(得分:3)
注入在回调函数中不起作用。
要在回调函数中访问变量,可以使用"use() "
函数:
$mydata = array ( ... );
$app->get('/api', function(Request $request, Response $response) use($mydata) {
echo json_encode($mydata);
});
答案 2 :(得分:2)
像这样注入对象:
$app->companies = new Companies();
如果你想确保每次都使用同一个,你也可以将它作为单身注入:
$app->container->singleton('companies', function (){
return new Companies();
});
这样称呼:
$app->companies->find($_SESSION['company_id']);
更新DOC链接: Slim Dependency Injection
答案 3 :(得分:1)
接受的答案不适用于Slim 3(因为钩子已被移除)。
如果您尝试为所有视图定义变量,并且使用的是PhpRenderer,则可以按照其示例进行操作:
// via the constructor
$templateVariables = [
"title" => "Title"
];
$phpView = new PhpRenderer("./path/to/templates", $templateVariables);
// or setter
$phpView->setAttributes($templateVariables);
// or individually
$phpView->addAttribute($key, $value);
答案 4 :(得分:0)
我终于能够使用它了
$app->hook('slim.before.dispatch', function() use ($app) {
$current_company = null;
if (isset($_SESSION['company_id'])) {
$current_company = Company::find($_SESSION['company_id']);
}
$app->view()->setData('current_company', $current_company);
});
答案 5 :(得分:0)
带有树枝/视图
创建中间件
php.ini