Jas*_*son 4 php frameworks cakephp
我有一个带有文件上传字段的表单,我已经创建了一个模型行为文件来处理文件处理.
我有两个函数,beforeSave和afterSave:
在beforeSave中我做了一些事情,然后将数据中的文件值设置为null,以便保存.否则它会尝试保存数组,而数据库只需要一个字符串(文件名)
在afterSave中,我根据表单上的一些文本字段生成一个新的文件名,并在其前面添加lastInsertId.我还将文件从temp移动到所需位置.这一切都很好,但是当我尝试将新文件名保存到模型时,它就不起作用了.
我做了很多测试和调试,也花了几个小时在线搜索.结论是你不能保存在afterSave中,它会自动触发并在之前再次运行.
所以我的问题是,如何更新新插入的模型?插入的文件名需要在其名称中包含主键,并在beforeSave时具有未知.
感谢任何帮助!贾森
Jus*_* T. 15
如果你想绕过 afterSave()本身的所有回调(afterSave/beforeSave),我发现这个语法对我有用:
$this->save($data, array('callbacks'=>false));
Run Code Online (Sandbox Code Playgroud)
要禁用触发器,手册会指出:
save方法还有一个替代语法:
save(array $ data = null,array $ params = array()) $ params array可以使用以下任何可用选项作为键:
array(
'validate' => true,
'fieldList' => array(),
'callbacks' => true //other possible values are false, 'before', 'after' )
Run Code Online (Sandbox Code Playgroud)
它可以这样做
// Its your model Image.php
function afterSave($created) {
if($created) {
// its new record
// do your work here
}
}
Run Code Online (Sandbox Code Playgroud)
Little Tweak(不推荐)
如果你想在afterSave()使用中绕过beforeSave on db operations $this->Model->query(),而不是 $this->Model->save();
// little hack to bypass beforeSave
$this->Model->query('UPDATE listings SET name="xx" WHERE id="1"');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16277 次 |
| 最近记录: |