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

标签 php slim

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

我通常有一些我希望在每个模板中可用的变量(如用户名、日期等)。在 Slim v2 中,我曾经通过使用钩子(Hook)然后调用 setData or appendData 来做到这一点。像这样的方法:

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

在 v3 中, Hook 已被中间件取代,但是我不知道如何为所有模板全局设置 View 上的数据 - 有什么想法吗?

最佳答案

这确实是根据您正在使用的 View 组件,Slim 3 项目提供2 个组件Twig-ViewPHP-View

对于Twig-View,你可以使用offsetSet,这是一个基本的usage example ,我将使用该示例,但多了一行将 foo 变量设置到 view

$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);

关于php - 在 Slim v3 中全局设置模板数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37643556/

相关文章:

php - Slim 3 将特定的正则表达式配置到路由中

php - 如何使用选项运行在 composer.json 中创建的自定义命令?

php - Slim 3容器创建自定义容器函数时未定义方法

javascript - PHP echo cookie to console.log 在源代码中正确写入,但在控制台中不正确

php - 添加两个数组变量

php - 超薄 Controller 请求、响应和参数不可用

php - Slim 框架 - 无法用点解释路由

Android - 带参数的 HttpGet

php - 上传顶部有空白单元格的 CSV 文件时出现未定义偏移错误

php - 如何从 MYSQL-加密字符错误中检索图像