我正在研究PHP MVC框架,我刚发现的问题是目录中特定文件的路径。当我路由到呈现页面的函数时,模板文件中定义的所有文件(包括CSS和图像)都没有被加载。
这是我的文件夹结构
首先,我使用以下代码在index.php中设置了路径:
<?php
// Path to system
$system_path = str_replace('\\', '/', dirname(__FILE__)).'/system';
$template_path = $system_path.'/templates';
?>
就像任何其他php框架一样,我可以在整个框架中使用这些路径变量。所以在我的家庭模板文件(system / templates / home / home.php)中,我有标签来调用位于system / templates / home / css / style.css中的style.css。所以模板文件中的链接标记是
<link rel='stylesheet' type='text/css' href='<?= $template_path; ?>/home/css/style.css' />
当我渲染页面时,上面css文件的绝对路径正确显示为
C:/Appserv/www/mysite/system/templates/home/css/style.css
但样式表从未加载,我不知道为什么。当我单击指向css文件的链接时,它返回403错误,其中包含奇怪的路径,如此
You don't have permission to access /mysite/C:/AppServ/www/mysite/system/templates/home/css/style.css
这让我感到困惑,因为此时路径不正确,因为它以网站名称开头,后跟上面模板文件中定义的路径。
无论如何都有解决这个问题的方法吗?
答案 0 :(得分:3)
将CSS文件加载到网页时,您不需要系统文件路径,而是URL。所以而不是:
<link rel='stylesheet' type='text/css' href='<?= $template_path; ?>/home/css/style.css' />
你需要这样的东西:
<link rel='stylesheet' type='text/css' href='/home/css/style.css' />
或者,如果您定义了基本网址:
<link rel='stylesheet' type='text/css' href='<?= $base_url; ?>/home/css/style.css' />
如果您仍想访问本地文件,请考虑使用file:///
协议(不推荐)。
答案 1 :(得分:1)
我认为如果在index.php或init.php中定义“template_url”或“base_url”常量会更好:
define('TEMPLATES_URL','http://localhost/system/templates');
然后在你的html中使用它:
<link rel='stylesheet' type='text/css' href='<?php echo TEMPLATES_URL; ?>/home/css/style.css' />