새로운 사용자를 만들 때 관련 모델이 POST를 통해 전송되는지 확인하는 방법에 대해 혼란스러워합니다. 아래에 나열된 두 가지 방법이 효과적입니다.cakephp의 필수 연관 모델을 확인하는 법 3
User hasOne UserDetails
옵션 1
POST 데이터 :
{
"username": "loremipsum",
"password": "123456",
"UserDetails": {
"first_name": "Lorem",
"last_name": "Ipsum"
}
}
PatchEntity UserDetail과 같이 사용자 엔티티에 추가 :
public function add() {
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->data(), [
'associated' => [],
'validate' => true
]);
$userDetail = $this->Users->UserDetails->newEntity($this->request->data());
$user->user_detail = $userDetail;
if ($this->Users->save($user, ['associated' =>['UserDetails']]))
{
...
편집 1 :은 if UserDetails $ this-> request-> data()에없는 경우 UserDetails 엔터티에 유효성 검사 오류가 발생합니다.
옵션 2
POST 데이터 :
{
"username": "loremipsum",
"password": "123456",
"user_detail": {
"first_name": "Lorem",
"last_name": "Ipsum"
}
}
이 UserTable.php에 user_detail 유효성 검사를 추가
편집 2 : 나는 user_detail 유효성 검사를 추가하지 않을 경우, 요청 연관된 모델없이 보낼 수 있으며 저장됩니다. 그것을 추가하면 $ this-> request-> data()에 user_detail 필드가 있고 사용자 엔티티이 유효성을 확인할 것입니다.
$validator
->requirePresence('user_detail', 'create')
->notEmpty('user_detail');
및 patchEntity UsersController.php에서이 같은
:public function add() {
$user = $this->Users->newEntity();
if ($this->request->is('post')) {
$user = $this->Users->patchEntity($user, $this->request->data(), [
'associated' => ['UserDetails'],
'validate' => true
]);
if ($this->Users->save($user, ['associated' =>['UserDetails']]))
{
...
은 케이크의 규칙 또는 그것을 할 수있다 최선의/깨끗한 방법에 따라 이러한 방법이 있습니까?
옵션 2가 더 좋습니다. 그리고'User'와 관련 모델'UserDetails' 모두에 대해 유효성 검사 오류를 줄 것입니다. –
@ObjectManipulator 답장을 보내 주셔서 감사합니다! 실제로 엔티티를 만들 때 유효성 검사가 실행되므로 두 경우 모두 유효성 검사가 작동합니다. 가장 큰 차이점은 코드 작성 및 데이터 전송 방법입니다. –