0

basePath对于给定的请求,我想为我的 Mvc 的每个组件设置相同的 a。我的意思是当我调用这些方法时,我想得到相同的结果,让我们说'/spam/ham/'

echo $this->headLink()->prependStylesheet($this->basePath() . '/styles.css')  // $this->basePath() has to be '/spam/ham/'

$this->getServiceLocator()
     ->get('viewhelpermanager')
     ->get('headLink')
     ->rependStylesheet($this->getRequest()->getBasePath() . '/styles.css')   // $this->setRequest()->getBasePath() has to be /spam/ham/

如何设置basePath我已经找到的第一个案例,这是我的问题。顺便说一句,原始手册没有我从答案中收到的任何信息。

现在第二个 -basePath必须设置在Request

$this->getRequest()->getBasePath()

在这里,我找到了一些实际上根本不起作用的答案http://zend-framework-community.634137.n4.nabble.com/Setting-the-base-url-in-ZF2-MVC-td3946284.html。如前所述,此处 StaticEventManager已弃用,因此我将其更改为SharedEventManager

// In my Application\Module.php

namespace Application;
use Zend\EventManager\SharedEventManager

    class Module {
        public function init() {             

                $events = new SharedEventManager(); 
                $events->attach('bootstrap', 'bootstrap', array($this, 'registerBasePath')); 
            } 

            public function registerBasePath($e) { 

                $modules = $e->getParam('modules'); 
                $config  = $modules->getMergedConfig(); 
                $app     = $e->getParam('application'); 
                $request = $app->getRequest(); 
                $request->setBasePath($config->base_path); 
            } 
        } 
    }

在我的modules/Application/configs/module.config.php我添加:

'base_path' => '/spam/ham/' 

但它不起作用。问题是:

1)运行永远不会到达registerBasePath函数。但它必须。我在init函数中附加了一个带有监听器的事件。

2)当我改变它SharedEventManager恰好EventManager来到registerBasePath函数但抛出异常时:

Fatal error: Call to undefined method Zend\EventManager\EventManager::getParam()

我做错了什么?为什么程序运行不来registerBasePath函数?如果这是设置basePath全局的唯一方法,那么该怎么做呢?

4

1 回答 1

4

我知道文档缺少这些东西。但是您的方法是正确的:

  1. 早点(所以在引导程序中)
  2. 从应用程序中获取请求
  3. 在请求中设置基本路径

文档缺少此信息,并且您引用的帖子很旧。最快和最简单的方法是使用以下onBootstrap()方法:

namespace MyModule;

class Module
{
    public function onBootstrap($e)
    {
        $app = $e->getApplication();
        $app->getRequest()->setBasePath('/foo/bar');
    }
}

如果要从配置中获取基本路径,可以在此处加载服务管理器:

namespace MyModule;

class Module
{
    public function onBootstrap($e)
    {
        $app = $e->getApplication();
        $sm  = $app->getServiceManager();

        $config = $sm->get('config');
        $path   = $config->base_path;

        $app->getRequest()->setBasePath($path);
    }
}
于 2012-12-20T19:59:34.283 回答