Slim framework 3 php-视图变量

Slim framework 3 php-view variable

我希望请求中的变量($request->getUri()->getBasePath();)始终在模板上可用。我该怎么做,例如使用中间件,而不必每次都将上述作为参数传递给渲染器->在所有路由上渲染?

$app->get(...
   ...
  $args['basepath']=$request->getUri()->getBasePath();
  return $this->renderer->render($response, 'test.php', $args);
});

更新: 这可以在 php-view 2.1.0 之后完成:

dependencies.php:

$container['renderer'] = function ($c) {
    $settings = $c->get('settings')['renderer'];
    return new Slim\Views\PhpRenderer($settings['template_path']);
};

middleware.php:

$app->add(function (Request $request, Response $response, callable $next) {
    $uri = $request->getUri();
    $renderer = $this->get('renderer');
    $renderer->addAttribute('uri', $request->getUri());
    return $next($request, $response);
});

然后,在模板内:

<?php
    $basePath=$uri->getBasePath();
    $rpath=$uri->getPath();
?>

在查看 PhpRenderer 的 the Code 时,您会发现目前无法在 render() 函数之外指定 data

您可以创建问题 and/or 提出拉取请求以支持该功能。

PHP-View 的 2.1.0 版现在支持在渲染前设置模板变量。参见 https://github.com/slimphp/PHP-View#template-variables