Css,JS包含方法

时间:2011-10-29 18:28:09

标签: php model-view-controller

这是一个概念性问题。什么是将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");

我认为这不是最佳方式,所以我该如何改进呢?

2 个答案:

答案 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/