Zend ErrorController访问初始控制器变量


Zend ErrorController access initial controller variables

我有一个错误控制器,我在其中发送一封关于未处理异常的电子邮件。我想输出一些变量值,这些值位于"原始"控制器(E.G indexController)中。

如何从ErrorController访问这些值?E.G $indexController->attr

好吧,您可以从错误控制器的视图对象访问原始控制器操作的视图变量。您可以将所需的值作为视图变量发送(如果可能的话),然后在错误控制器中使用它们:

// In your original controller's action
$this->view->customVariable1 = 123;
$this->view->customVariable2 = 'abc';
// In your error controller's error action
$cv1 = $this->view->customVariable1;
$cv2 = $this->view->customVariable2;

我可以说这是有效的,因为我已经测试过在error.phtml中显示我的视图变量,它显示了原始控制器的视图变量。

现在,如果您需要更多的控制,可以使用会话来存储这些值。

我认为这是不可能的,因为在调度相应的操作后,原始控制器对象会被销毁(Zend_controller_Dispatcher_Standard的第314行,ZF 11.7)

然而,如果您在控制器中捕获异常,则可以将有问题的变量推送到全局注册表(例如Zend_registry),然后重新抛出异常,以便错误控制器捕获该异常;一旦错误控制器执行,它就可以从全局注册表访问这些变量。