0

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

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

 }
} 

如何在注释行之后添加新行?我尝试过使用钩子,但效果不佳。此外,我认为使用钩子是在不更改核心代码的情况下创建插件系统的最佳方式。

提前致谢

4

1 回答 1

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);
}
于 2012-06-17T15:03:41.583 回答