一尘不染

ZF2-将控制器名称放入布局/视图

php

我知道使用ZF1,您将使用自定义View Helpers检索模块/控制器名称,该自定义View
Helpers将获得单例frontController对象并在那里获取名称。

使用ZF2消除了框架的单例性质,并引入了DI,其中我为该模块中的所有控制器指定了别名…我可以想象我可以通过访问DI或注入DI来获得它当前名称进入布局。

任何人都知道您将如何做。我猜有一百种不同的方式,但是在嗅探了几个小时的代码之后,我真的无法弄清楚现在该怎么做。

我想要控制器名称的原因是将其作为特定控制器样式的类添加到主体。

谢谢,唐


阅读 236

收藏
2020-05-29

共1个答案

一尘不染

ZF2出局了,骨架也出局了。这是最基本的,因此应该是最好的例子:

内部Module.php

public function onBootstrap($e)
{
    $e->getApplication()->getServiceManager()->get('translator');
    $e->getApplication()->getServiceManager()->get('viewhelpermanager')->setFactory('controllerName', function($sm) use ($e) {
        $viewHelper = new View\Helper\ControllerName($e->getRouteMatch());
        return $viewHelper;
    });

    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
}

实际的ViewHelper:

// Application/View/Helper/ControllerName.php

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class ControllerName extends AbstractHelper
{

protected $routeMatch;

    public function __construct($routeMatch)
    {
        $this->routeMatch = $routeMatch;
    }

    public function __invoke()
    {
        if ($this->routeMatch) {
            $controller = $this->routeMatch->getParam('controller', 'index');
            return $controller;
        }
    }
}

在您的任何视图/布局内

echo $this->controllerName()
2020-05-29