我创建了一个简单的带有登录表单,仪表板,注册页面和帐户页面的苗条应用程序。每个页面都有自己的路线。所有页面使用相同的页眉和页脚,通过在每个页面模板的开头和结尾分别添加<?php include __DIR__ . '/header.phtml' ?><?php include __DIR__ . '/footer.phtml' ?>来将其包括在内,并将页面内容置于其中。

我想根据查看的页面动态地包含不同的样式表,但是我不想只是懒惰地将它们放置在我的.phtml文件中,并将它们呈现在网页的中间。

我想开发一些if / switch函数放置在header.phtml文件中,该文件可以识别当前路线并呈现指向相应样式表的链接。将以下代码放置在文档头中:

<?php
if($currRoute === "/dashboard") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/dashboard.css">
  <?php
} else if($currRoute === "/register") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/register.css">
  <?php
} else if ($currRoute === "/account") {
  ?>
  <link rel="stylesheet" type="text/css" href="assets/css/account.css">
  <?php
}
?>


在没有一些复杂的正则表达式,任何其他语言,类库等的情况下,是否有解决方案来获取上述示例中的$currRoute值?

最佳答案

我没有尝试检索当前路由,而是在每个路由回调中创建了一个包含路由名称的字符串变量,然后将该名称作为参数传递给渲染器(在这种情况下,我使用的是Slim的php-view包)。这是一个示例,将字符串"dashboard"作为参数传递给dashboard.phtml模板文件:

$app->get('/dashboard', function (Request $request, Response $response, array $args) {
  $args['pageTitle'] = "dashboard";
  return $this->renderer->render($response, 'register.phtml', $args);
});


根据路由名称,为$args['pageTitle']键分配一个关键字标识符作为字符串。

然后,在我的header.phtml文件中,创建了一个switch语句,该语句将$args['pageTitle']的值与一组硬编码的字符串进行比较,以确定要加载的适当样式表:

<head>
  <title>Slim 4 PHP Template</title>

  <?php
    if(isset($pageTitle)) {
      switch($pageTitle) {
        case "dashboard":
          echo "<link rel='stylesheet' type='text/css' href='assets/css/dashboard.css'>";
          break;
        case "register":
          echo "<link rel='stylesheet' type='text/css' href='assets/css/register.css'>";
          break;
      }
    }
  ?>
</head>


当访问“ http://example.domain.com/dashboard”处的路线时,将呈现到相应样式表的链接,如下所示:

<head>
  <title>Slim 4 PHP Template</title>

  <link rel="stylesheet" type="text/css" href="assets/css/dashboard.css">
</head>

关于php - PHP + Slim PHP Framework:如何在文档头中动态添加样式表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57972720/

10-11 22:14
查看更多