<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)动画(/.Here/app/views/.Here/)作为包含所有文件的目录。如果我当前在views目录中,我应该使用(动画/任何文件名),但它不是以这些方式工作的。但是,如果我使用完整的目录路径,一切都会正常工作。为什么会发生这样的事情,任何人都可以解释。
( slim )是我安装slim的根目录
发布于 2018-07-28 15:31:01
使用相对路径不是您通常使用Slim的方式。您的资源(JavaScript/CSS/图像等)应该从视图中绝对引用:
src="/assets/js/myapp.js"
路由的URL不会直接映射到基于文件系统的资源,因为模板不应由URL公开访问-它们只由控制器提供服务。
常见的超薄file structure如下所示:
app/
public/index.php
templates/
view.html
assets/
images/
js/
css/
Some将assets子文件夹直接添加到公用文件夹中。Others将这些文件夹放在根目录下。
但是,一般而言,公共资产(例如CSS、JS、图像)应该位于公共文档根目录下(公众可以访问)。
如果你不喜欢这个行为,有一件事可能会很有帮助,那就是使用Slim的basePath变量。
您应该能够在index.php
的slim.before
回调中将基URL设置为视图变量,以便它可用于所有路由,如下所示:
$app->hook('slim.before', function () use ($app) {
$app->view()->appendData(array('baseUrl' => '/base/url/here'));
});
或
$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 ));
});
然后将其应用于基本模板文件的HTML标记中的引用,仅此而已。
<link rel="stylesheet" type="text/css" href="{{ base_url() }}/css/style.css" />
或者使用Uri::getBaseUrl(),例如
$basePath = $request->getUri()->getBasePath();
https://stackoverflow.com/questions/51568681
复制相似问题