控制器内的挂钩

时间:2012-06-15 13:14:00

标签: controller hook codeigniter-2

好吧,我尝试创建一个基于钩子的插件系统,但我对钩子如何改变特定的控制器功能感到困惑,看下面的例子:

class Article extends CI_Controller
{
 public function index()
 {
  $title = $this->input->post('title');
  $body = $this->input->post('body');

  //try to add a new line here using hooks
  //maybe to add a new property like:
  //$published = $this->input->post('date');

  $this->my_db->save($article);

 }
} 

如何在评论行后添加新行?我试过钩子但不是很好的结果。另外,我认为使用钩子是创建插件系统而不更改核心代码的最佳方法。

提前致谢

1 个答案:

答案 0 :(得分:0)

好的,我找到了答案(至少有一个选项)。你需要设置你需要的“钩点”,在我的情况下,我是这样做的:

class Article extends CI_Controller
{
 public function index()
 {
  $title = $this->input->post('title');
  $body = $this->input->post('body');

  $article = new Article();
  $article->setTitle($title);
  $article->setBody($body);

  do_action('before_persist', $article);

  $this->my_db->save($article);

 }
} 

最后,我的“before_persist”函数具有正确的代码,以便为$ article对象添加新属性

register_hook('before_persist', 'add_date_article', $params);

如果使用CI挂钩,可以在自定义类中声明add_date_article函数。

function add_date_article($params)
{
   $article = $params[0];
   $published = $this->input->post('date');
   $article->setPublished($publiched);
}