【问题标题】:Component and beforeFilter not loaded in controller when called from another controller从另一个控制器调用时,组件和 beforeFilter 未加载到控制器中
【发布时间】:2013-11-21 15:35:57
【问题描述】:

我在 controller1 中调用 controller2 来执行一些操作。问题是,controller2 的操作需要调用它的 beforeFilter 和一个加载到 AppController 中的组件。

其实controller2的action直接调用的时候执行的很好,但是在controller1调用的时候报错如下:

App::import('Controller', 'Second');
$Second = new SecondController;
$Second->someAction();

在组件和 beforeFilter 中定义的变量显示为未设置。 如何通过调用 beforeFilter 并使用我的自定义组件来加载外部控制器?

【问题讨论】:

  • 您永远不必从另一个控制器调用一个控制器。如果你这样做,你做错了什么。重构您的代码以满足 MVC,尤其是 CakePHP 处理基本调度过程的方式。
  • 如果为了代码清晰起见,我想将一个控制器分成 2 个,按类型分组操作怎么办?
  • 我也经常这样做,但这仍然不能证明跨控制器调用是合理的。一切都需要在组件或模型中 - 永远不要进行跨控制器调用。

标签: cakephp controller components


【解决方案1】:

在这种情况下,选择很少

1. Use request Actions http://book.cakephp.org/2.0/en/controllers.html#Controller::requestAction

2. Move the logic or code you want to execute from SecondCrontroller to common component and use it in both contrllers. 

3. Move the logic or code you want to execute from SecondCrontroller to AppController

【讨论】:

  • 另外,模型可能是一个好地方 (4.) - 完成列表。
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-19
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多