未调用Cakephp 2模型beforeSave()
我不明白为什么这个代码不起作用。未调用保存之前的未调用Cakephp 2模型beforeSave(),cakephp,cakephp-2.0,cakephp-model,Cakephp,Cakephp 2.0,Cakephp Model,我不明白为什么这个代码不起作用。未调用保存之前的。它应该失败保存并在调试日志中放入一些行,但实际上它确实保存OK,并且没有在调试日志中写入任何行 <?php class Link extends AppModel { var $name = "Link"; var $belongsTo = array('Category' => array('className' => 'Category', 'foreignKey' => 'category_id'))
。它应该失败保存并在调试日志中放入一些行,但实际上它确实保存OK,并且没有在调试日志中写入任何行
<?php
class Link extends AppModel {
var $name = "Link";
var $belongsTo = array('Category' => array('className' => 'Category', 'foreignKey' => 'category_id'));
public function beforeSave(){
if ($this->data[$this->alias]['id'] == null) {
$this->log("new record", 'debug');
$link = $this->find('first',array('conditions' => array('Link.status = 1 AND Link.category_id = '.$this->data[$this->alias]['category_id']), 'order' => array('Link.order DESC') ));
if (is_null($link)) {
$this->data[$this->alias]['order'] = 1;
}else{
$this->data[$this->alias]['order'] = $link['Link']['order'] + 1;
}
}
else {
$this->log("old record", 'debug');
}
return false;
}
}
?>
StackOverflow中的另一个问题指出,
beforeSave
方法需要在模型中声明。我也对另一个模型做了同样的事情。以下是一些一般建议和对代码的一些注释,以获得答案:
1) 如果模型回调或任何模型方法不起作用,请确保使用的是正确的模型,而不是默认模型(AppModel)。检查文件名、类名、扩展名(在您的情况下)和位置
2) 您错误地使用了条件数组(在本例中)
array('conditions'=>array('Link.status=1和Link.category\u id='.$this->data[$this->alias]['category\u id'])
你真的应该做:
array('conditions' => array('Link.status' => 1, 'Link.category_id' => $this->data[$this->alias]['category_id'])
3) 你的重定向被错误地使用了
$this->redirect(数组('action'=>'index/'.$category_id))代码>
应该是:
$this->redirect(array('action' => 'index', $category_id));
以下是一些关于代码的一般性建议和评论,以供回答:
1) 如果模型回调或任何模型方法不起作用,请确保使用的是正确的模型,而不是默认模型(AppModel)。检查文件名、类名、扩展名(在您的情况下)和位置
2) 您错误地使用了条件数组(在本例中)
array('conditions'=>array('Link.status=1和Link.category\u id='.$this->data[$this->alias]['category\u id'])
你真的应该做:
array('conditions' => array('Link.status' => 1, 'Link.category_id' => $this->data[$this->alias]['category_id'])
3) 你的重定向被错误地使用了
$this->redirect(数组('action'=>'index/'.$category_id))代码>
应该是:
$this->redirect(array('action' => 'index', $category_id));
如前所述,您的save()将始终失败,并使用beforeSave()。beforeSave()必须返回true才能使save函数成功。
事实上,您的似乎总是返回false,这保证了保存失败
从蛋糕手册:
确保beforeSave()返回true,否则保存将失败
如前所述,您的save()将始终失败,并使用beforeSave()。beforeSave()必须返回true才能使save函数成功。
事实上,您的似乎总是返回false,这保证了保存失败
从蛋糕手册:
确保beforeSave()返回true,否则保存将失败
在add方法中,添加debug(get_class($this->Link))代码>输出什么?谢谢评论。它在控制器中显示:“AppModel”和行#。这就是您的问题所在。它没有找到你的链接模型,所以它是基于AppModel创建的。你把那个文件放在哪里了?链接模型的文件名是什么?谢谢,文件扩展名是个问题。如果您想保留记录,请继续。在add方法中,添加debug(get_class($this->Link))代码>输出什么?谢谢评论。它在控制器中显示:“AppModel”和行#。这就是您的问题所在。它没有找到你的链接模型,所以它是基于AppModel创建的。你把那个文件放在哪里了?链接模型的文件名是什么?谢谢,文件扩展名是个问题。如果你想记录下答案,那就继续吧。优秀的,还需要大量练习cakephp!还值得一提的是,您也应该始终调用父方法:public function beforeSave(){parent::beforeSave();…},以确保父类的代码也能正确执行!还值得一提的是,您也应该始终调用父方法:public function beforeSave(){parent::beforeSave();…}以确保父类的代码也正确执行。确切地说,问题甚至没有被调用,false只是为了在我进行实际保存之前对其进行测试,但是谢谢你的澄清。很明显,这个问题甚至没有被调用,false只是为了在我进行实际保存之前测试它,但是谢谢你的澄清