1

我在我的 CI 应用程序“专门的 pre_controller 钩子”中使用钩子。
但问题是每次向任何其他控制器发出请求时都会激活钩子,即使是我不希望在其中激活钩子的控制器。可以只为一个控制器启用钩子吗?就像 playframework 中的 @Before 注释一样。
提前致谢。

4

2 回答 2

8

你为什么不把这个逻辑放在你的控制器的构造函数中呢?

如果您有多个希望共享此功能的控制器,只需在CI_Controller其中扩展一个新类application/core/MY_Controller.php并将功能放入其中,然后在控制器中让它们扩展该类而不是默认的 CI_Controller(您可以在其中添加多个类MY_Controller.php)!

您放入覆盖类中的任何内容都将在MY_Controller.php控制器其余部分的代码之前执行,模拟pre_controller钩子。

只要记住也要调用父构造函数:

function __construct(){
   parent::__construct();
}

有关扩展核心的更多信息,请参阅手册:https ://www.codeigniter.com/user_guide/general/core_classes.html

于 2012-11-24T08:33:16.063 回答
0

您还可以将代码放入库中,以便在需要时使用。我最终使用了我的解决方案,因为我可以将身份验证逻辑与模块分开。它也使更新变得更容易。

于 2013-06-24T02:11:31.960 回答