CakePHP4のメモ
![]() |
13 |
395 views
入力データにバリデーションを適用する。バリデーションの処理に、Modelクラスのバリデーションを適用する。
クリーンアーキテクチャはなるべくフレームワークに依存しないようにするべき、という点でModelクラスのバリデーションを使うのはよくないらしいが、現実的には使ったほうが開発効率はよい。
本例では、バリデーションにModelクラスのバリデーションを適用した場合の例を挙げる。
// src/Service/UserService.php
namespace App\Service;
use App\Model\Entity\User;
use App\Model\Table\UsersTable;
class UserService {
private $usersTable;
private $lastErrors = []; // 最後のバリデーションエラーを保存するためのプロパティ
public function __construct(UsersTable $usersTable) {
$this->usersTable = $usersTable;
}
public function addUser($data): ?User {
$user = $this->usersTable->newEntity($data);
if ($this->usersTable->save($user)) {
return $user;
} else {
$this->lastErrors = $user->getErrors(); // エンティティのエラーを保存
return null;
}
}
public function getErrors(): array {
return $this->lastErrors;
}
}
// src/Model/Table/UsersTable.php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class UsersTable extends Table {
public function initialize(array $config): void {
$this->setEntityClass(User::class);
}
public function validationDefault(Validator $validator): Validator {
$validator
->notEmptyString('username', 'Username is required')
->minLength('username', 3, 'Username is too short')
->email('email', false, 'Invalid email format')
->notEmptyString('password', 'Password is required');
return $validator;
}
}
// src/Controller/UsersController.php
namespace App\Controller;
use App\Controller\AppController;
use App\Service\UserService;
class UsersController extends AppController {
private $userService;
public function initialize(): void {
parent::initialize();
$this->userService = new UserService($this->loadModel());
}
public function add() {
if ($this->request->is('post')) {
$data = $this->request->getData();
$user = $this->userService->addUser($data);
if ($user) {
$this->set('user', $user);
} else {
// バリデーションエラーのハンドリング
$errors = $this->userService->getErrors();
$this->Flash->error('There were errors in your submission.');
$this->set(compact('errors'));
}
}
}
}
Page 17 of 34.
1.php_xdebug-3.0.4-8.0-vs16-x86_64.dll
すぺぺぺ
本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。
https://www.osumoi-stdio.com/novel/