CakePHP3.2.9로의 업데이트에서 오류를 반환하게 된 existsIn을 처리하는 이야기
CakePHP3.2.9가 릴리스 되었기 때문에 업데이트하면 테스트가 통과하지 않게 되어 버렸습니다…
분명히 existsIn이 업데이트되었기 때문입니다.
(변경 개소: Force Exists In rule in new Entity even with a not dirty field )
지금까지 이하와 같은 느낌의 처리를 하고 있었습니다.
src/Controller/ArticlesController.php
public function add()
{
$article = $this->Articles->newEntity();
if ($this->request->is('post')) {
$article = $this->Articles->patchEntity($article, $this->request->data);
$article->user = $this->Users->get($this->Auth->user('id'));
if ($this->Articles->save($article)) {
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('保存できません'));
}
}
src/Model/Table/ArticlesTable.php
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->existsIn(['user_id'], 'Users'));
return $rules;
}
Controller가 user_id 대신 user를 entity 형태로
$article->user
로 설정했기 때문에 $article->user_id
가 설정되지 않았기 때문에 existsIn()
가 오류를 반환하는 것 같습니다.지금까지는 user_id가 설정되어 있지 않으면 체크하지 않았지만, 신규 작성시에는 그것은 허용되지 않게 된 것 같다?
그래서 어쩐지 석연하지는 않지만 다음을 추가했습니다.
src/Model/Table/ArticlesTable.php
public function beforeRules($event, $entity, $options, $operation)
{
if (!empty($entity->user)) {
$entity->user_id = $entity->user->id;
}
}
에러는 나오지 않게 되었지만, 이것으로 좋은 것인가…
Reference
이 문제에 관하여(CakePHP3.2.9로의 업데이트에서 오류를 반환하게 된 existsIn을 처리하는 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ran/items/25074cd28b33aab4881f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)