Zend framework Zend Framework-如何在视图中使用在其他控制器中声明的脚本变量?

Zend framework Zend Framework-如何在视图中使用在其他控制器中声明的脚本变量?,zend-framework,variables,view,controller,Zend Framework,Variables,View,Controller,Zend Framework-如何在视图中使用在其他控制器中声明的脚本变量? 我是否需要再次将变量传递给控制器中的视图?如果您有一些“核心”视图变量要添加到多个视图实例中,那么可以想象,您可以有一个额外的抽象层,并在其中声明您的核心视图变量。例如: class myController extends Zend_Controller_Action 可能成为 class myController extends myCoreController 及 及 通过这种方式,您可以在多个控制器中使用核

Zend Framework-如何在视图中使用在其他控制器中声明的脚本变量?
我是否需要再次将变量传递给控制器中的视图?

如果您有一些“核心”视图变量要添加到多个视图实例中,那么可以想象,您可以有一个额外的抽象层,并在其中声明您的核心视图变量。例如:

class myController extends Zend_Controller_Action
可能成为

class myController extends myCoreController


通过这种方式,您可以在多个控制器中使用核心变量,并在一个位置维护它们。

ex:如果您有两个控制器:

控制器A:它有一些变量,变量将传递给视图A 控制器B:它有一些变量,变量将传递给视图B

视图B无法访问控制器A的变量


因此,如果您想在视图B中使用控制器A的变量,您必须在控制器B中重新声明它

简短的回答是,则必须将数据重新分配给视图

但也有选择

如果这些数据将在许多视图脚本中使用,根据您的用例,可能适合构建或

一个简单的视图辅助程序:

class Zend_View_Helper_Length extends Zend_View_Helper_Abstract
{

    public function length($minutes)
    {

        $hours = floor($minutes / 60);
        $minutes = $minutes % 60;

        if ($hours > 0) {
            $time = sprintf("%01d Hours %02d Minutes", $hours, $minutes);
        } else {
            $time = sprintf("%02d Minutes", $minutes);
        }
        return $time;
    }
}
一个简单的动作助手:

class My_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{

    public function direct()
    {
        $form = new Application_Form_Login();
        $form->setAction('/index/login');

        return $form;
    }
}
如果要在单个控制器的多个操作中使用数据,则可以在init()方法中设置数据:

如果您只需要在较短时间内保存一段数据,您可以将其保存到或更长时间,您可以使用(我发现此解决方案特别有用)


这些只是使应用程序可以使用不同数据段的一些更常见的方法。更直接的问题可能会得到更直接的答案。

以这种方式扩展Zend_Controller_的行动将是非常糟糕的形式,几乎从来都不需要。我不同意你的看法,Rocky。如果您有一个希望跨多个站点实例部署的核心框架,那么扩展和添加抽象层是非常重要的。你知道这样一个核心系统有更好的解决方案吗?我想知道是否有更好的方法。我没有说永远,我说几乎永远。总是有超出预期用例的边缘用例,需要不同的选择。对于我们大多数人来说,视图帮助程序、操作帮助程序、插件和init()是一个更正确的解决方案。很高兴你同意我和你当时一样是正确的:)谢谢。谢谢,非常有用的信息
class Zend_View_Helper_Length extends Zend_View_Helper_Abstract
{

    public function length($minutes)
    {

        $hours = floor($minutes / 60);
        $minutes = $minutes % 60;

        if ($hours > 0) {
            $time = sprintf("%01d Hours %02d Minutes", $hours, $minutes);
        } else {
            $time = sprintf("%02d Minutes", $minutes);
        }
        return $time;
    }
}
class My_Controller_Action_Helper_Login extends Zend_Controller_Action_Helper_Abstract
{

    public function direct()
    {
        $form = new Application_Form_Login();
        $form->setAction('/index/login');

        return $form;
    }
}
public function init()
    {
        //initialize the flash messenger action helper to work in all actions
        if ($this->_helper->FlashMessenger->hasMessages()) {
            $this->view->messages = $this->_helper->FlashMessenger->getMessages();
        }
    }