web-dev-qa-db-ja.com

CakePHP 3でbeforeSaveを使用する方法は? $ event、$ entity、および$ optionsは常に入力する必要がありますか?

私は中にいます"PostsTable.php"画像ファイルを処理するためのフォームデータを取得しようとしています。

CakePHP 2では、以前は次のことを行っていました。

public function beforeSave($options = array())
{
if(!empty($this->data['Post']['picture']['name'])...

誰かがケーキ3でこれを説明することができます。

beforeSave
Cake\ORM\Table::beforeSave(Event $event, Entity $entity, ArrayObject $options)

[〜#〜]追加[〜#〜]

このコードスニペットを試して、このフィールドをテストとしてデータベースに保存できるかどうかを確認しましたが、beforeSaveが無視されているようです。

public function beforeSave($options)
{ 
if(!empty($entity->pic1['name'])) 
{ 
$entity->pic1 = 'jus a test';
}

ありがとう

10
I Wanna Know

関数の定義から始めます。

_Cake\ORM\Table::beforeSave(Event $event, EntityInterface $entity, ArrayObject $options)
_

CakePHPは関数を自動的に呼び出すので、これが呼び出される方法です。関数定義と同じように関数を作成します。

_// In PostsTable.php
public function beforeSave($event, $entity, $options) {

}
_

送信されているデータがわからない場合は、CakePHPのdebug()関数を使用してください。

_    debug($event); debug($entity); debug($options);
_

_$entity_でデータを見つけたら、それを使用してデータに対して実行したいことを実行します。

_    if (!empty($entity->picture['name'])) { ...
_
9
Naidim

これが私が使用した例です:

use Cake\Event\Event;
public function beforeSave(Event $event)
{
    $entity = $event->getData('entity');
    if(!empty($entity->picture['name']){
       // your action here
    }
}
1
Zahid