为什么slim需要完整的目录路径来加载外部资产(js / css)文件

时间:2018-07-28 06:23:32

标签: twig slim

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <script  type="text/javascript" src="/slim/app/views/animations/jquery.min.js"></script>
    <script type="text/javascript" src="/slim/app/views/animations/bootstrap.min.js"></script>
    <link rel="stylesheet" href="/slim/app/views/animations/bootstrap.min.css">


</head>
<body>
    <div class="container">
    hello
    </div>
</body>
</html>

我必须指定用于加载js和CSS文件的完整目录路径 (jquery.min.js和bootstrp.min.js和bootstrap.min.css)。 (/ slim / app / views / animations /)作为目录,其中包含所有 文件。如果当前我在views目录中,则应使用 (动画/任何文件名),但在这些文件中不起作用 办法。但是,如果我使用完整目录路径,则一切正常。为什么这些 任何人都可以解释。

(slim)是我安装了slim的根目录

1 个答案:

答案 0 :(得分:0)

使用相对路径不是通常使用Slim的方式。从您的观点来看,应该绝对引用您的资产(JavaScript / CSS /图像等):

src="/assets/js/myapp.js"

路由的URL不会直接映射到基于文件系统的资源,因为模板不应被URL公开访问-它们仅由控制器提供服务。

常见的苗条file structure如下所示:

app/
public/index.php
templates/
  view.html
assets/
  images/
  js/
  css/

Some将资产子文件夹直接添加到公用文件夹中。 Others将这些文件夹放在根级别。

但是,通常,公共资产(例如CSS,JS,图像)应位于公共文档根目录下(公众可以访问)。

如果您不喜欢此行为,可能会有所帮助的一件事是使用Slim的basePath变量。

您应该能够在slim.before的{​​{1}}回调中将基本URL设置为View变量,以便对所有这样的路由都可用:

index.php

$app->hook('slim.before', function () use ($app) {
    $app->view()->appendData(array('baseUrl' => '/base/url/here'));
});

然后将其应用于基本模板文件的HTML标记中的引用即可。

$app->hook('slim.before', function () use ($app) {
    $posIndex = strpos( $_SERVER['PHP_SELF'], '/index.php');
    $baseUrl = substr( $_SERVER['PHP_SELF'], 0, $posIndex);
    $app->view()->appendData(array('baseUrl' => $baseUrl ));
});

或使用Uri::getBaseUrl(),例如

<link rel="stylesheet" type="text/css" href="{{ base_url() }}/css/style.css" />