ZF2 - 将控制器名称添加到布局/视图中

我知道使用ZF1,您将使用自定义视图帮助程序检索模块/控制器名称,该助手将获取单例前控制器对象并在那里获取名称。

使用ZF2,因为他们已经废除了框架的许多单例性质,并引入了DI,我已经为这个模块中的所有控制器指定了别名......我可以想象我会通过访问DI或将当前名称注入布局来获得它。

任何人都知道你该怎么做。我想有一百种不同的方法,但是在嗅了几个小时的代码之后,我真的无法弄清楚它现在应该如何完成。

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

谢谢,多姆


答案 1

ZF2已经出来了,骨架也出来了。这是在骨架顶部添加的,所以它应该是你最好的例子:

内部模块.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()

答案 2

这将是我使用zf2 beta5的解决方案

模块/我的模块/模块.php

namespace MyModule;

use Zend\Mvc\ModuleRouteListener;
use MyModule\View\Helper as MyViewHelper;

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

        $serviceManager->get('viewhelpermanager')->setFactory('myviewalias', function($sm) use ($e) {
            return new MyViewHelper($e->getRouteMatch());
        });
    }
    ...
}

module/MyModule/src/MyModule/View/Helper.php

namespace MyModule\View;

use Zend\View\Helper\AbstractHelper;

class Helper extends AbstractHelper
{

    protected $route;

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

    public function echoController()
    {
        $controller = $this->route->getParam('controller', 'index');
        echo $controller;
    }
}

在任何视图文件中

$this->myviewalias()->echoController();

推荐