我创建了一个简单的超薄应用程序,其中包含登录表单、仪表板、注册页面和帐户页面。每个页面都有自己的路由。所有页面都使用相同的页眉和页脚,通过添加 <?php include __DIR__ . '/header.phtml' ?>
包含在内。和 <?php include __DIR__ . '/footer.phtml' ?>
分别到每个页面模板的开头和结尾,页面内容位于其间。
我想根据查看的页面动态包含不同的样式表,但我不想懒惰地将它们放在我的 .phtml 文件中并让它们呈现在网页中间。
我想开发一些放在 header.phtml
中的 if/switch 函数识别当前路由并呈现指向适当样式表的链接的文件。类似于下面的代码,放在文档头中:
<?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 框架 : How to dynamically add stylesheets to the document head?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57972720/