0

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

4

3 回答 3

1

简短的回答是肯定的!,您必须将数据重新分配给视图。

但是有一些选择。

如果此数据将在许多视图脚本中使用,则根据您的用例构建视图助手操作助手可能是合适的。

一个简单的视图助手:

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() 方法中设置数据:

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();
        }
    }

如果您只是需要在短时间内保存一段数据,您可以将其保存到注册表中,或者您可以使用会话较长时间(我觉得这个解决方案特别有用)。

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

于 2012-09-07T02:42:01.173 回答
0

例如:如果您有 2 个控制器:

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

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

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

于 2012-09-06T14:19:42.777 回答
-1

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

class myController extends Zend_Controller_Action

可能成为

class myController extends myCoreController

class mySecondController extends myCoreController

class myCoreController extends Zend_Controller_Action

通过这种方式,您可以让您的核心变量跨控制器可用,并将它们全部保存在一个地方。

于 2012-09-06T14:17:39.633 回答