0

将公共变量和函数放入 Zend 框架 2(带有原则)的最佳/标准方法是什么,以便在所有模块中使用,特别是它们的控制器。

我在某处读到我们的控制器应该扩展另一个控制器(如 AppCommonController),而后者又扩展了 AbstractActionController。AppCommonController 然后将定义我们可以在任何扩展它的控制器中访问的公共变量和函数。

有没有更好/标准的方法来做到这一点?

- -更新 - -

例如,我想在我的大多数控制器(跨不同模块)中检查我的站点的当前模式(测试或实时),并因此希望在操作中执行必要的操作。

我在一些控制器中写了以下内容:

    private $__currentMode = '';

    public function __construct()
    {
        //following will be set to Live or Test depending on a session value
        $this->setCurrentMode('Live');
    }

    public function setCurrentMode($mode)
    {
        $this->__currentMode = $mode;
    }

    public function getCurrentMode()
    {
        return $this->__currentMode;
    }

我认为将上述代码放在我需要检查当前模式的所有控制器中是一个坏主意。

所以我想把它(currentMode 属性和 getter/setter 函数)放在某个地方,我可以在任何需要的地方在所有控制器中访问它们。

4

2 回答 2

2

似乎这就是控制器插件的用途

首先创建一个控制器插件...

namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;

class MyModeHelper extends AbstractPlugin
{
    protected $mode;

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

    public function getMode()
    {
        return $this->mode;
    }
}

getControllerPluginConfig()然后在 Module.php 中使用方法告诉控制器管理器

// in Application/Module.php
public function getControllerPluginConfig()
{
    return array(
        'factories' => array(
            'myModeHelper' => function($sm) {
                // get mode from environment
                $mode = 'live';
                return new Controller\Plugin\MyModeHelper($mode);
            }
         )
      ); //fixed syntax error
    }
}

插件现在应该在您在控制器中调用它的任何时候都可用

// in your controllers
public function indexAction()
{
    if ($this->myModeHelper()->getMode() == 'live') {
        // do live stuff
    } else {
        // do test stuff
    }
    return new ViewModel();
} 
于 2013-01-07T11:26:32.320 回答
1

好吧,很大程度上取决于功能。

首先:变量可能最好放在配置中。从那里开始,它们可以在任何ServiceLocator存在 a 的地方访问。

就函数而言,它在很大程度上取决于函数的作用。它们是某种 ControllerLogic 吗?那么你的方法Mymodule\Stdlib\Controller\Mycontroller可能是个好主意。

Stdlib查看当前在-Namespace下具有通用代码的“社区标准”是普遍接受的。

除了上述之外,我不知道该告诉你什么,因为你的问题很模糊。

于 2013-01-07T07:31:38.230 回答