###前提・実現したいこと
・登録フォームを用意(対象のinputはnameとかで)
・ng_wordテーブルに設定した言葉をバリデーションしたい
1.テーブルに単語を登録
2.ControllerのinitializeでTableRegistryを使用してng_wordEntityを取得
3.Actionで $this->set('ngword', $this->ngwords->find())
Controller
public function register($lang = null) { $lang = ($lang === null) ? 'ja' : $lang; $dataMaster = new DataMaster(); $this->set('Countries', $dataMaster->getAllCountries($lang)); $this->set('Languages', $dataMaster->getAllLanguages($lang)); $this->set('Genders', $dataMaster->getAllGenders($lang)); if ($lang === 'ja') { $this->set('Prefectures', $dataMaster->getAllPrefectures($lang)); }else{ $this->set('Prefectures', false); } $member = $this->Member->newEntity(); if ($this->request->is('post')) { $member = $this->Member->newEntity($this->request->data, [ 'associated' => ['MemberDetail'] ]); if ($member->errors()){ $this->Flash->error(__('The member could not be saved. Please, try again.')); } if ($this->Member->save($member)) { $this->Flash->success(__('The member has been saved.')); return $this->redirect(['action' => 'login']); } } $this->set(compact('member')); $this->set('_serialize', ['member']); }
$ngWords = $this->ngwords->find(); foreach ($ngWords as $row){ $word[] = $row->word; } $this->set('ngwords', $word);
Table
public function validationDefault(Validator $validator) { $validator ->allowEmpty('id', 'create'); $validator ->allowEmpty('nickname') ->add('nickname', [ 'ngword' => [ 'rule' => function($value, $context){ return !TableRegistry::get('ng_word')->exists(["'{$value}' LIKE concat('%', word, '%')"]); }, 'massage' => '「おなまえ」に不適切な語句が含まれています' ] ]); $validator ->integer('gender') ->notEmpty('gender'); $validator ->date('birthday') ->allowEmpty('birthday'); $validator ->integer('country') ->allowEmpty('country'); $validator ->integer('prefecture') ->allowEmpty('prefecture'); $validator ->integer('language') ->allowEmpty('language'); $validator ->allowEmpty('created_by'); $validator ->dateTime('created_at'); $validator ->allowEmpty('updated_by'); $validator ->dateTime('updated_at'); return $validator; }
Template
<div class="member form large-9 medium-8 columns content"> <?= $this->Form->create($member) ?> <fieldset> <legend><?= __('新規会員登録') ?></legend> <p>全項目入力して下さい</p> <?php echo $this->Form->input('member_detail.0.nickname', ['label' => __('なまえ')]); echo $this->Form->input('member_detail.0.gender', ['label' => __('性別'), 'type' => 'radio', 'options' => $Genders]); echo $this->Form->input('member_detail.0.birthday', ['label' => __('生年月日'), 'type' => 'date', 'dateFormat' => 'YMD', 'monthNames' => false, 'maxYear' => date('Y'), 'minYear' => 1850, 'empty' => '---']); echo $this->Form->input('member_detail.0.country', ['label' => __('国籍'), 'type' => 'select', 'options' => $Countries]); if ($Prefectures) { echo $this->Form->input('member_detail.0.prefecture', ['label' => __('都道府県'), 'type' => 'select', 'options' => $Prefectures]); } echo $this->Form->input('member_detail.0.language', ['label' => __('言語'), 'type' => 'select', 'options' => $Languages]); echo $this->Form->input('mail_address', ['label' => __('メールアドレス'), 'type' => 'email']); echo $this->Form->input('login_id', ['label' => __('ログインID'), 'type' => 'text']); echo $this->Form->input('login_password', ['label' => __('パスワード'), 'type' => 'password']); echo $this->Form->hidden('is_active', ['default' => 1]); echo $this->Form->hidden('is_deleted', ['default' => 0]); ?> </fieldset> <?= $this->Form->button(__('確認')) ?> <?= $this->Form->end() ?> </div>
ここからどうして良いか分かりません。
カスタムバリデーションの作成や取得したデータをそこに反映させる方法等・・
###補足情報(言語/FW/ツール等のバージョンなど)
php7.1.1 / cake PHP3.3.12/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/08 05:54 編集
2017/02/08 06:55 編集
2017/02/08 07:29
2017/02/08 10:28
2017/02/09 05:19
2017/02/09 05:26
2017/02/09 05:28
2017/02/09 06:50
2017/02/09 07:10 編集
2017/02/09 07:11
2017/02/09 07:20
2017/02/09 07:20
2017/02/09 07:21
2017/02/09 07:30
2017/02/09 07:31
2017/02/09 07:49
2017/02/09 08:02
2017/02/09 08:23
2017/02/09 08:34
2017/02/09 09:53