关于Zend Framework的css问题

时间:2011-05-17 00:09:52

标签: zend-framework zend-layout

不确定我在这里做错了什么,但似乎框架只能在每个控制器上的索引操作中找到style.css。我从layout.phtml中调用它,如下所示:

$this->headLink()->appendStylesheet('css/styles.css');

所以当我去project.local / account时,我找到了样式。如果我去project.local / account / action没有样式......实际上如果我去project.local / account / index ......就没有样式。所以...这是一个奇怪的错误,或者至少它是一个n00b

编辑:当我在firefox上打开代码控制台并尝试关注css / styles.css时,我发现以下错误消息:

<pre>#0 /home/fiodorovich/library/ZendFramework/library/Zend/Controller/Action.php(515): Zend_Controller_Action->__call('cssAction', Array)
#1/home/fiodorovich/library/ZendFramework/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('cssAction')
#2 /home/fiodorovich/library/ZendFramework/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 /home/fiodorovich/library/ZendFramework/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 /home/fiodorovich/library/ZendFramework/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 /home/fiodorovich/public_html/gisele/public/index.php(26): Zend_Application->run()
#6 {main}  </pre>

  <h3>Request Parameters:</h3>
  <pre>array (
  'controller' =&gt; 'gisele',
  'action' =&gt; 'css',
  'module' =&gt; 'default',
)  </pre>

1 个答案:

答案 0 :(得分:2)

传递给appendStylesheet的参数只是在HTML中盲目输出,框架实际上并没有查找该文件。

这是在某些页面而不是其他页面上工作的原因是您已经为appendStylesheet提供了相对链接。基本上,当浏览器遇到相对链接时,它会删除最后一个斜杠处的当前URL,然后添加链接。

因此,在project.local / account上,浏览器正在project.local / css / styles.css中查找CSS,但在project.local / account / action上,浏览器正在项目中查找CSS。本地/帐户/ CSS / Styles.css中。

长话短说,在参数中添加一个前导斜杠,这将使其成为根目录相对链接,将解析到所有页面上的相同位置:

$this->headLink()->appendStylesheet('/css/styles.css');

正如Phil在评论中指出的那样,上述示例只有在您的ZF应用程序安装在站点的根目录中时才会起作用(如本例所示)。无论站点在站点层次结构中的位置如何,使用BaseUrl帮助程序都将输出正确的路径。

$this->headLink()->appendStylesheet($this->baseUrl('css/styles.css'));