如何在slim框架中定义全局变量

时间:2014-05-14 03:34:34

标签: php slim

我如何定义一个全局变量,以便我的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 %}

6 个答案:

答案 0 :(得分:6)

您可以将值注入app对象:

$app->foo = 'bar';

更多关于Slim’s documentation

答案 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