这是一个概念性问题。什么是将CSS,Javascript等资源包含到HTML页面的最佳方法.. 我正在实现自己的MVC框架。应用程序directroy structer是
index.php
controllers
c1.php
c2.php
...
views
v1.php
v2.php
...
scripts
s1.js
s2.js
...
styles
style1.css
style2.css
...
正如你所看到的,所有请求都来自index.php然后我找到了正确的控件来处理它..控制器处理一些业务逻辑然后包含一个视图文件..
在视图文件中,我需要像这样给出所有css和java脚本的绝对路径;
<link rel="stylesheet" type="text/css" href="<?php echo APPROOT; ?>/styles/master.css" />'
<script type="text/javascript" src="<?php echo APPROOT; ?>/scripts/jquery-1.6.1.min.js"></script>
APPROOT是一个定义应用程序目录路径的常量:
define("APPROOT", "/project1");
我认为这不是最佳方式,所以我该如何改进呢?
答案 0 :(得分:2)
通常,您希望将应用程序保留在公共目录之外,并创建一个包含它的路径。这样,只有当请求路径中的文件不存在时,您才可以编写url重写以简单地重定向到index.php。在htaccess中,看起来就像这样。
# redirect any requests for missing files to index.php
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php/$1 [L]
这样,如果正在请求的文件 存在于公共目录中,则apache将照常提供该文件,但如果请求的文件不存在,它将重定向到index.php以进行MVC处理。
要创建指向应用程序目录的包含路径,请参阅以下文档:
http://php.net/manual/en/function.set-include-path.php
您还可以通过inis设置包含路径。
答案 1 :(得分:1)
在我看来,正确的方法是像Zend那样做。它可能与您的代码兼容也可能不兼容。
$this->view->headLink()->appendStylesheet($this->view->baseUrl().'/css/style.css');
$this->view->headScript()->appendFile($this->view->baseUrl().'/js/jquery.js','text/javascript',array('language'=>'javascript'));
但我怀疑你的方式,@ dqhendricks有很好的意见,我认为你应该看看这个教程,并重新考虑你的框架方法。
http://anantgarg.com/2009/03/13/write-your-own-php-mvc-framework-part-1/