ZF2:如何安装监听器的模块类的事件?(ZF2: How to attach listener on

2019-10-17 12:48发布

我想设置一个basePath是针对给定的请求我的MVC每个组件相同。 我的意思是,当我调用这些方法我想获得相同的结果,让我们说'/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/' 

但它desn't工作。 这些问题是:

1)运行从来没有涉及到registerBasePath功能。 但它必须如此。 我已经把它贴在了听众的事件init函数。

2)当我改变SharedEventManager只是EventManager碰巧来到registerBasePath功能,但一个exeption被抛出:

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

我该怎么办错了吗? 为什么程序运行不来的registerBasePath功能? 如果是这样设置的唯一途径basePath全局那该怎么做是正确的?

Answer 1:

我知道的文件是缺乏这些事情的。 但是,你是正确的处理这个方式:

  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);
    }
}


文章来源: ZF2: How to attach listener on the event in the Module class?