zendframework baseUrl在bootstrap中查看帮助器

时间:2010-01-06 00:17:00

标签: php zend-framework

我的网站使用zend框架并在子文件夹中运行,例如:http://www.example.com/sub/folder。现在我想在/ sub / folder /之前添加我的css链接以在http://www.example.com/sub/folder/product/abc之类的页面中加载css,我以为我找到了一个查看帮助器来执行此BaseUrl,但BaseUrl似乎只能在实际视图文件中工作不是在bootstrap类。 有没有人知道这个的原因和一个可以解决的解决方法?

这是我的boodstrap课程的片段。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initStylesheet()
    {
        $this->_logger->info('Bootstrap ' . __METHOD__);

        $this->bootstrap('view');
        $this->_view = $this->getResource('view');

        $this->_view->headLink()->appendStylesheet($this->_view->baseUrl('/css/main.css'));
    }
}

3 个答案:

答案 0 :(得分:5)

我找到了baseUrl()视图帮助器在Bootstrap中无效的原因。这是因为Zend_Controller_Front没有Zend_Controller_Request

因此,为了解决这个问题,我添加了一个其他资源方法来初始化请求。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRequest()
    {
        $this->_logger->info('Bootstrap ' . __METHOD__);

        $this->bootstrap('FrontController');

        $front = $this->getResource('FrontController');
        $request = new Zend_Controller_Request_Http();

        $front->setRequest($request);
    }

    protected function _initStylesheet()
    {
        $this->_logger->info('Bootstrap ' . __METHOD__);

        $this->bootstrap('view');
        $this->_view = $this->getResource('view');

        $this->_view->headLink()->appendStylesheet($this->_view->baseUrl('/css/main.css'));
    }
}

答案 1 :(得分:1)

要获得baseUrl,您可以使用

Zend_Controller_Front::getInstance()->getBaseUrl();

或非ZF解决方案:

substr($_SERVER['PHP_SELF'], 0, -9);

答案 2 :(得分:0)

实际上,你不需要得到baseUrl,因为ZF已经为你做了。你只需要注意你的道路。不要使用第一个斜线!否则ZF将返回远程地址。

只需使用'$this->_view->headLink()->appendStylesheet('css/main.css');'