【问题标题】:how to use call_user_func inside a cakephp model class?如何在 cakephp 模型类中使用 call_user_func?
【发布时间】:2012-10-10 01:11:29
【问题描述】:

我在 cakephp 模型中有以下功能:

/**
 *
 * saveMany without MeioUpload validations
 *
 */
public function saveManyDataOnly($data) {
    // since creating records without files, 
    // we need to detach the behavior
    $this->Behaviors->unload('MeioUpload.MeioUpload');

    $result = $this->saveMany($data);

    $this->Behaviors->load('MeioUpload.MeioUpload');        

    return $result;
}

我也需要同样的东西来保存和保存关联。

同样的,我的意思是我需要在分别调用 save 和 saveAssociated 后卸载然后重新加载行为。

我不希望使用回调 beforeSave 和 afterSave。

添加:

我也不希望重写 save 和 saveAssociated 方法。

原因是有时我想在加载行为的情况下使用 save、saveAssociated、saveMany。

我有时想要卸载该行为的主要原因是因为在我进行保存时的某些情况下,由该行为触发的验证和回调不可取 , saveAssociated 或 saveMany

我当然可以简单地多写 2 个函数,但我相信应该有一种方法可以使用 call_user_func 来完成相同的目标,而无需编写更多代码。

帮助我了解如何编写此类代码以及如何调用新函数。

【问题讨论】:

  • 那么,您的问题是什么?如果你有适合你的方法,你为什么不开心?您可以随时从模型中的任何方法调用 call_user_func 或任何其他 php 函数。
  • @bancer 你说得对,我至少有一个工作方法。我只是想学习如何编写更好的解决方案和更优雅的代码。
  • 4 行方法对我来说似乎简短、清晰、优雅。关键词是“清楚”。它易于阅读和理解。看看这里 - programmers.stackexchange.com/questions/97912/…

标签: php cakephp callback


【解决方案1】:

您可以通过传递 'callbacks' => false 来暂时禁用回调函数:

$this->save($data, array('validate' => true, 'callbacks' => false)); 

【讨论】:

  • 我不想覆盖,因为有时我想在加载行为的情况下进行正常保存。出于同样的原因,我也不希望使用 afterSave 和 beforeSave 回调。
  • 我刚刚更新了我的答案,你能检查一下它是否适合你吗?
  • 问题是我需要在某些情况下卸载整个行为。不停止回调。该行为具有某些我不希望触发的验证和回调。所以最好的方法是卸载它,然后在我完成后重新加载它。并且请不要告诉我将 validate 设置为 false,因为这也会停止我不想要的模型本身的验证。
  • 同样,您的解决方案将停止模型本身的回调,我也不希望发生这种情况。
  • 我不明白您为什么不在 beforeSave 上设置卸载行为,而在 afterSave 上加载。通过这种方式,您可以控制应在何处使用该行为。或者你已经让这个回调做其他事情了?
猜你喜欢
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多