Zend Framework中的BaseUrl视图助手在引导程序中的应用

3
我的网站使用Zend框架,并在子文件夹中运行,例如:http://www.example.com/sub/folder。现在我想在我的CSS链接前加上/sub/folder/,以便在类似http://www.example.com/sub/folder/product/abc的页面中加载CSS。我认为我找到了一个视图助手来做这个BaseUrl,但是BaseUrl似乎只能在实际的视图文件中工作,而不能在引导类中工作。有人知道原因和可接受的解决方法吗?
这是我的引导类片段。
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个回答

5

我找到了 BootstrapbaseUrl() 视图助手无法工作的原因。这是因为 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

要获取baseUrl,您可以使用以下方法

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

或者一个非ZF的解决方案:

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

1
谢谢您的回复,但是Zend_Controller_Front::getInstance()->getBaseUrl();已经在视图助手中使用了。如果我在引导类中使用Zend_Controller_Front::getInstance()->getBaseUrl();它会返回null。 - vdrmrt

0
其实,你不需要获取baseUrl,因为Zend Framework已经为你处理好了。你只需要注意你的路径即可。不要使用第一个斜杠!否则ZF会返回远程地址。只需使用'$this->_view->headLink()->appendStylesheet('css/main.css');'即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接