CakePHP 3 - beforeSave回调在编辑时不起作用

qxgroojn  于 2022-11-11  发布在  PHP
关注(0)|答案(4)|浏览(143)

我有一个beforeSave-callback,每当我创建一个新实体时,它就被调用了。但是当我编辑时,它根本就没有被调用。在文档中找不到任何有用的东西。
下面是我的编辑函数:

public function edit($id = null) {
    if (!$id) {
        throw new NotFoundException(__('Invalid article'));
    }

    $article = $this->Articles->get($id);
    if ($this->request->is(['post', 'put'])) {
        $this->Articles->patchEntity($article, $this->request->data);
        if ($this->Articles->save($article)) {
            $this->Flash->success(__('Your article has been updated.'));
            return $this->redirect(['action' => 'index']);
        }
        $this->Flash->error(__('Unable to update your article.'));
    }

    $this->set('article', $article);
}
7qhs6swi

7qhs6swi1#

beforeSave函数只有在您发布/编辑的数据被修改时才会被触发。

//triggers only if an entity has been modified
public function beforeSave(Event $event, Entity $entity)
{
    if($entity->isNew()) {       
        //on create
    } else {
        //on update
    }
}
tmb3ates

tmb3ates2#

我也遇到了教程在这一点上卡住的问题,但是我使用bin/cake bake命令自动生成ArticlesTable代码,它添加了这个验证器:

$validator
        ->scalar('slug')
        ->maxLength('slug', 191)
        /*->requirePresence('slug', 'create')*/
        ->notEmptyString('slug')
        ->add('slug', 'unique', ['rule' => 'validateUnique', 'provider' => 'table']);

当我注解requirePresence()时,它为我解决了这个问题。如果您有requirePresence('fieldName','create')进行验证,那么在创建新的Article实体时,如果您在帖子上没有该字段,您将得到一个错误。

62lalag4

62lalag43#

是的,您需要使用EventEntity对象:
请检查以下示例:

// src/Model/Table/ArticlesTable.php

use Cake\Event\Event;
use Cake\ORM\Entity;

public function beforeSave(Event $event, Entity $entity) {
    if ($entity->isNew()) {
        return true;
    }
    // edit code
}
gajydyqb

gajydyqb4#

编写相同代码的另一种方法:

public function beforeSave(\Cake\Event\Event $event, \Cake\ORM\Entity $entity, \ArrayObject $options){

    if($entity->isNew()) {
        // on create
    } else {
        // on update
    } 
}

相关问题