【问题标题】:Cakephp - Overriding model method from controllerCakephp - 从控制器覆盖模型方法
【发布时间】:2011-12-05 01:10:34
【问题描述】:

我需要在控制器调用的模型中覆盖和添加方法。我不想在 Model 类文件中写任何东西,因为它也被其他控制器使用。方法如pagination()find(),我可以在控制器内部进行吗?

【问题讨论】:

  • 有什么理由不能将这些方法命名为其他名称吗?
  • 对我来说听起来像是一个非常疯狂的想法......为什么要动态地向模型对象添加方法?
  • 如果您需要在多个控制器中使用您的代码,那么您可能应该使用一个组件,并重新考虑您的方法。
  • @mark - 我只有一个控制器在不同的实现中使用模型,模型文件的任何更改都会影响其他控制器。
  • @Ross - 我只有一个控制器用于搜索功能。

标签: cakephp


【解决方案1】:

CakePHP 行为是mixins。他们将方法添加到模型中,这正是您要寻找的。​​p>

听起来好像动态地将一个行为附加到模型会得到你需要的结果。

查看Model::__construct(),我可以看到它调用了$this->Behaviors->init($this->alias, $this->actsAs);

您可以在模型被实例化后再次调用它以附加不同的行为(即$this->MyModel->Behaviors->init('MyModel', array('MyBehavior'));)。


事实上,仔细观察会发现$this->MyModel->BehaviorsBehaviorCollection 的一个实例。因此,您可以使用attach() 方法。

【讨论】:

  • 感谢您提供有用的信息,这是与我的stackoverflow.com/questions/137006/… 来自java 背景的类似案例的链接,我很困惑。似乎使用另一个功能或行为是要走的路。
  • deizel - 可以附加行为覆盖方法还是添加新方法有好处?
  • 刚刚在本地测试过,恐怕它们只适用于添加方法。如果你想覆盖方法,你应该扩展类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
相关资源
最近更新 更多