I W*_*now 10 cakephp cakephp-3.0
我在"PostsTable.php"内部我正在尝试获取表单数据来处理图像文件.
在CakePHP 2中,我曾经做过:
public function beforeSave($options = array())
{
if(!empty($this->data['Post']['picture']['name'])...
Run Code Online (Sandbox Code Playgroud)
有人可以在Cake 3中解释这个:
beforeSave
Cake\ORM\Table::beforeSave(Event $event, Entity $entity, ArrayObject $options)
Run Code Online (Sandbox Code Playgroud)
?
添加
我尝试这段代码,看看我是否能够将这个字段保存在数据库上,就像测试一样,但似乎在忽略之前保存:
public function beforeSave($options)
{
if(!empty($entity->pic1['name']))
{
$entity->pic1 = 'jus a test';
}
Run Code Online (Sandbox Code Playgroud)
谢谢
从函数定义开始.
Cake\ORM\Table::beforeSave(Event $event, EntityInterface $entity, ArrayObject $options)
Run Code Online (Sandbox Code Playgroud)
由于CakePHP自动调用函数,因此调用它的方式,因此构建函数与函数定义完全相同:
// In PostsTable.php
public function beforeSave($event, $entity, $options) {
}
Run Code Online (Sandbox Code Playgroud)
如果您不确定要发送的数据,请使用CakePHP的debug()功能:
debug($event); debug($entity); debug($options);
Run Code Online (Sandbox Code Playgroud)
找到正在$entity使用的数据后,您可以对数据执行以下操作:
if (!empty($entity->picture['name'])) { ...
Run Code Online (Sandbox Code Playgroud)
bur*_*zum -3
让我为您阅读一下手册:
Model.beforeSave 事件在保存每个实体之前触发。停止此事件将中止保存操作。当事件停止时,将返回事件的结果。
还:
Model.beforeSave:将在计算要持久化的字段列表之前触发。它接收实体和选项作为参数。选项数组作为 ArrayObject 传递,因此其中的任何更改都将反映在每个侦听器中,并在事件结束时被记住,以便它可用于其余的保存操作。在任何侦听器中返回 false 都会中止保存过程。如果使用事件 API 停止事件,将返回事件对象的结果属性。当您在侦听器内实施自己的保存策略时,这会很有用。
要执行您之前在 Cake2 中所做的任何操作,您只需进行修改即可,$entity因为实体已替换了Model::$data属性。
if(!empty($entity->picture['name'])
Run Code Online (Sandbox Code Playgroud)
如果您不知道事件如何运作,请阅读相关内容。迁移指南也是必读的。它列出了所有已更改的内容。
| 归档时间: |
|
| 查看次数: |
13421 次 |
| 最近记录: |