【问题标题】:Variables available in all controllers?所有控制器中都有可用的变量?
【发布时间】:2012-12-17 15:49:57
【问题描述】:

在哪里以及如何设置在所有控制器中都可用的变量值。我不会使用 zend 注册表,也不想扩展 Zend_Controller_Action。还有其他方法吗?我只想设置:

$a = "测试";

并在索引控制器中转储它:

类 IndexController 扩展 Zend_Controller_Action { 公共函数 indexAction(){ var_dump($a); } }

【问题讨论】:

  • 为什么不想使用 Zend_Registry?

标签: zend-framework


【解决方案1】:

全局变量破坏了面向对象编程的目的...使用命名空间或自定义配置。

解决方案 1

使用会话 Zend_Session_Namespace,这里是documentation on how to Zend_Session_Namespace

  1. 在 bootstrap 或其他东西的命名空间中设置值(只要您认为合适)
  2. 从控制器/模型/其他的命名空间中检索值

解决方案 2

或者,您可以创建一些具有静态属性的新类,并使用它的 setter/getter 来设置和检索值。

例如

class SomeClass
{    
    static $hello = 'world';
}

class IndexController extends Zend_Controller_Action
{
    public function indexAction()
    {
        var_dump(SomeClass::$hello);
    }
}

【讨论】:

    【解决方案2】:

    您可以向请求对象添加变量:

    $this->getRequest()->setParam('a', 'hello');
    

    然后使用以下方法检索它:

    $this->getRequest()->getParam('a);
    

    但这不是最好的方法,因为您可能会不小心将参数覆盖为所需的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多