在Slim v3中全局设置模板数据

时间:2016-06-05 15:27:43

标签: php slim

我最近开始使用版本3中更新的Slim框架构建一个新的应用程序。

我通常在每个模板中都有一些我想要的变量(比如用户名,日期等)。在Slim v2中,我曾经通过使用钩子然后调用setData or appendData方法来执行此操作:

$app->view->setData(array(
    'user' => $user
));

H3已被v3中的Middlewares取代,但是我不知道如何在全局视图中为所有模板设置数据 - 任何想法?

2 个答案:

答案 0 :(得分:8)

这实际上是根据您使用的 view 组件,Slim 3项目提供了2个组件Twig-ViewPHP-View

对于 Twig-View ,您可以使用 offsetSet ,这是一个基本的usage example,我将使用该示例,但是另外一行将 foo 变量设置到视图

$container['view'] = function ($c) {
    // while defining the view, you are passing settings as array
    $view = new \Slim\Views\Twig('path/to/templates', [
    'cache' => 'path/to/cache'
    ]);

    // Instantiate and add Slim specific extension
    $basePath = rtrim(str_ireplace('index.php', '', $c['request']->getUri()->getBasePath()), '/');
    $view->addExtension(new Slim\Views\TwigExtension($c['router'], $basePath));

    //////////////////////////////
    // this is my additional line
    $view->offsetSet('foo', 'bar');
    //////////////////////////////

    return $view;
};

只需使用

即可在Twig模板中访问
{{ foo }}

对于 PHP-View ,它有不同形式的传递变量到模板,您可以在here

中找到它们
// via the constructor
$templateVariables = [
    "title" => "Title"
];
$phpView = new PhpRenderer("./path/to/templates", $templateVariables);

// or setter
$phpView->setAttributes($templateVariables);

// or individually
$phpView->addAttribute($key, $value);

答案 1 :(得分:5)

对于twig-view

$view->getEnvironment()->addGlobal($name, $value);