質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

4257閲覧

【CakePHP3】確認画面に遷移する前にバリデートチェックかける方法

DaisukeMori

総合スコア225

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2018/04/27 09:36

編集2018/04/27 09:39

【現在できていること】
新規登録フォーム -> 確認画面 -> (ModelのTableでバリデートチェック)
-> チェックOKならデータベースに登録
-> チェックNGなら新規登録フォームに戻る

【実現したいこと】 前提:CakePHP 3x
新規登録フォーム -> (ModelのTableでバリデートチェック)
-> チェックOKなら確認画面へ遷移
-> チェックNGなら新規登録フォームに戻る

-> 確認画面 -> (ModelのTableでバリデートチェック)

-> チェックOKならデータベースに登録
-> チェックNGなら新規登録フォームに戻る

データベースにSaveする以外に、バリデートチェック(ルールチェックの方も)をかける方法を教えて欲しいです。

PHP

1UsersTable.php 2 3<?php 4 namespace App\Model\Table; 5 6 use Cake\Event\Event; 7 use Cake\ORM\Query; 8 use Cake\ORM\Table; 9 use Cake\Validation\Validator; 10 use Cake\ORM\RulesChecker; 11 12 class UsersTable extends Table{ 13 14(中略) 15 16// バリデート 17 public function validationDefault(Validator $validator){ 18 return $validator 19 ->add('username', [ 20 'maxLen' => ['rule' => ['maxLength', 10],'message'=>'10文字以内で登録して下さい'], 21 'minLen' => ['rule' => ['minLength', 3],'message'=>'3文字以上で登録して下さい'] 22 ]) 23 ->notEmpty('username','A username is required') 24 ->notEmpty('password','A password is required') 25 ->notEmpty('role','A role is required') 26 ->add('role','inList',[ 27 'rule' => ['inList',['admin','author']], 28 'message' => 'Please enter a valid role' 29 ]); 30 } 31 32// ルールチェッカー 33 public function buildRules(RulesChecker $rules){ 34 $rules 35 ->add($rules->isUnique(['username'],'このユーザーネームは既に登録済みです')); 36 return $rules; 37 } 38 } 39?>

PHP

1UsersController.php 2 3<?php 4namespace App\Controller; 5 6use App\Controller\AppController; 7use Cake\Event\Event; 8use Cake\ORM\Table; 9use Cake\ORM\TableRegistry; 10use Cake\Validation\Validator; 11use Cake\ORM\RulesChecker; 12 13class UsersController extends AppController{ 14 15(中略) 16 17// データベース登録 18 public function add(){ 19 $user = $this->Users->newEntity(); 20 if ($this->request->isPost()) { 21 $data = $this->request->data(); 22 $user = $this->Users->patchEntity($user, $data); 23 if ($this->Users->save($user)) { 24 return $this->redirect(['action' => 'login']); 25 } 26 } 27 $this->set('user', $user); 28 } 29 30// 確認画面出し 31 public function confirm(){ 32 $data = $this->request->data(); 33 $session = $this->request->session(); 34 35 if($this->request->isPost()){ 36 $session->write([ 37 'username' => $data['Users']['username'], 38 'password' => $data['Users']['password'], 39 'role' => $data['Users']['role'], 40 'gender' => $data['Users']['gender'], 41 ]); 42 $this->set('username', $session->read('username')); 43 $this->set('password', $session->read('password')); 44 $this->set('role', $session->read('role')); 45 $this->set('gender', $session->read('gender')); 46 } 47 } 48 49(中略) 50 51} 52 53?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

クックブックもちゃんと読みましょう

投稿2018/04/27 15:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DaisukeMori

2018/04/28 15:24

今後はわからなくなったら、ドキュメントを一度見てみます。
guest

0

自己解決

コメントのクックパッドとhttps://qiita.com/morisuke/items/6dab83d5814971bdbc47のサイトを見ながら
一応確認画面に遷移前にバリデートチェックをかけることはできましたので半分解決できた感じです。

ただ、rulecheckerに入れている「isUnique」の方が、確認画面からデータベースにアップする際にしかチェックかけられてないので、引き続き調査研究が必要。

投稿2018/04/28 15:13

DaisukeMori

総合スコア225

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問