Zend framework Zend框架中的css问题

Zend framework Zend框架中的css问题,zend-framework,zend-layout,Zend Framework,Zend Layout,我不确定我在这里做错了什么,但框架似乎只能在每个控制器的索引操作上找到style.css。我从layout.phtml这样调用它: $this->headLink()->appendStylesheet('css/styles.css'); <pre>#0 /home/fiodorovich/library/ZendFramework/library/Zend/Controller/Action.php(515): Zend_Controller_Action->

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

$this->headLink()->appendStylesheet('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>
因此,当我转到project.local/account时,我会找到样式。如果我转到project.local/account/action,则没有样式……实际上,如果我转到project.local/account/index,则没有样式。所以这是一个有点奇怪的错误,至少对于n00b来说是这样

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

#0/home/fiodorovich/library/ZendFramework/library/Zend/Controller/Action.php(515):Zend_Controller_Action->_调用('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\u Controller\u Dispatcher\u Standard->dispatch(对象(Zend\u Controller\u Request\u Http),对象(Zend\u Controller\u Response\u 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\u Application\u Bootstrap\u Bootstrap->run()
#5/home/fiodorovich/public_html/gisele/public/index.php(26):Zend_应用程序->运行()
#6{main}
请求参数:
排列(
“控制器”=“吉赛尔”,
“操作”=“css”,
“模块”=“默认值”,
)  

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

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

因此,在project.local/account上,浏览器在project.local/CSS/styles.CSS上查找CSS,但在project.local/account/action上,浏览器在project.local/account/CSS/styles.CSS上查找CSS

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

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


我真不敢相信它竟然如此愚蠢!非常感谢您,如果应用程序是从子目录运行的,那么这将不起作用。最好使用helper,例如
$this->headLink()->appendStylesheet($this->baseUrl('css/styles.css'))
最好将css作为js保存在模块中。您可以通过使用符号链接来实现这一点:$cd public$ln-s../application/modules/backend/public backend
$this->headLink()->appendStylesheet('/css/styles.css');
$this->headLink()->appendStylesheet($this->baseUrl('css/styles.css'));