2016/2/1 久米
バリデーション by CakePHP3 CookBook
テーブル名:neko_chans
ファイル | コード例 | 備考 | |
C | src>Controller> NekoChansController.php |
<?php
namespace App\Controller;
use App\Controller\AppController;
class NekoChansController extends AppController{
public function index(){
$nekoChans = $this->NekoChans->find();
$this->set('nekoChans', $nekoChans);
}
public function add(){
$nekoChan = $this->NekoChans->newEntity();
$this->set('nekoChan', $nekoChan);
if($this->request->is('post')){
$nekoChan = $this->NekoChans->patchEntity($nekoChan, $this->request->data);
if($this->NekoChans->save($nekoChan)){
return $this->redirect(['action'=>'index']);
}
}
}
} |
|
M | src>Model>Table> NekoChansTable.php |
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Validation\Validator;
class NekoChansTable extends Table{
public function validationDefault(Validator $validator){
$validator
->notEmpty('name', '名前を記入してください。')
->allowEmpty('tokugi')
->add('tokugi', 'maxLen',
['rule'=>['maxLength', 20],
'message'=>'20字以内で入力してください。'])
->add('age', 'valid',
['rule'=>'numeric',
'message'=>'数字で入力してください。'])
->notEmpty('age', '数字で入力してください。');
return $validator;
}
} |
|
V その1 |
src>Template>NekoChans> index.ctp |
前ページのindex.ctpと同じ | |
V その2 |
src>Template>NekoChans> add.ctp |
<div>
<h3>猫ちゃんず追加</h3>
<?= $this->Form->create($nekoChan, ['novalidate' => true]) ?>
<fieldset>
<?php
echo $this->Form->input('name', ['label'=>'名前']);
echo $this->Form->input('tokugi', ['label'=>'特技']);
echo $this->Form->input('age', ['label'=>'年齢']);
?>
</fieldset>
<?= $this->Form->button('追加') ?>
<?= $this->Form->end() ?>
</div> |
create($nekoChan を入れることにより バリデーション発動 'novalidate' => true はブラウザでのチェックを排除 |
アクセス | http://localhost/web3/caketest/neko-chans/add |
書式 | |||
$validator->allowEmpty(列名 ); | 空の値OK | ||
$validator->notEmpty(列名 ); | 空の値NG エラー | ||
$validator->add | いろいろある |
$validator->add(列名 , ルール名 , ルール );
ルール | 意味 | ||
['rule' => ['numeric']] | 数字でないとエラー | ||
['rule' => ['maxLength', 20]] | 最大文字数20字 | ||
['rule' => ['email']] | @のメール形式でないとエラー | ||
['rule' => ['compareWith', 'password']] | passwordの値と一致しないとエラー |
ページネーション PaginatorHelper by CakePHP3 CookBook
テーブル名:neko_lines
ファイル | コード例 | 備考 | |
C | src>Controller> NekoLinesController.php |
<?php namespace App\Controller; use App\Controller\AppController; class NekoLinesController extends AppController{ public $paginate = [ 'limit'=>5, 'order'=>[ 'NekoLines.id'=>'desc' ] ]; public function initialize(){ parent::initialize(); $this->loadComponent('Paginator'); } public function index(){ $this->set('nekoLines', $this->paginate()); } } |
|
M | src>Model>Table> NekoLinesTable.php |
||
V | src>Template>NekoLines> index.ctp |
<h1>猫LINE</h1>
<table>
<tr><th>id</th><th>メッセージ</th></tr>
<?php foreach($nekoLines as $nekoLine): ?>
<tr>
<td><?= $nekoLine->id ?></td>
<td><?= h($nekoLine->msg) ?></td>
</tr>
<?php endforeach; ?>
</table>
<div class="paginator">
<ul class="pagination">
<?= $this->Paginator->prev('< ' . __('previous')) ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(__('next') . ' >') ?>
</ul>
<p><?= $this->Paginator->counter() ?></p>
</div> |
|
V | webroot>css> cake.css |
.paginator { text-align: center; } .paginator ul.pagination li { float: none; display: inline-block; } .paginator p { text-align: right; color: rgba(0, 0 ,0 , 0.54); } |
paginatorクラスの cssを使用する デフォルトのままなら いじらなくてよい |
アクセス | http://localhost/web3/caketest/neko-lines/ |
もうひとつの方法。若干面倒。
ファイル | コード例 | 備考 | |
C | src>Controller> NekoLinesController.php |
<?php namespace App\Controller; use App\Controller\AppController; class NekoLinesController extends AppController{ public $paginate = [ 'limit'=>5, 'order'=>[ 'NekoLines.id'=>'desc' ] ]; public $helpers = [ 'Paginator'=>['templates'=> 'paginator-templates'] ]; public function initialize(){ parent::initialize(); $this->loadComponent('Paginator'); } public function index(){ $this->set('nekoLines', $this->paginate()); } } |
|
M | src>Model>Table> NekoLinesTable.php |
||
V | src>Template>NekoLines> index.ctp |
<h1>猫LINE</h1>
<?= $this->Paginator->first('最初') ?>
<?= $this->Paginator->prev('<前へ') ?>
<?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next('次へ>') ?>
<?= $this->Paginator->last('最後') ?>
<table>
<tr><th>id</th><th>メッセージ</th></tr>
<?php foreach($nekoLines as $nekoLine): ?>
<tr>
<td><?= $nekoLine->id ?></td>
<td><?= h($nekoLine->msg) ?></td>
</tr>
<?php endforeach; ?>
</table> |
|
V | config> paginator-templates.php |
<?php return [ 'prevActive' => '<span class="prev"><a rel="prev" href="{{url}}">{{text}}</a></span> | ', 'prevDisabled' => '', 'nextActive' => '<span class="next"><a rel="next" href="{{url}}">{{text}}</a></span> | ', 'nextDisabled' => '', 'first' => '<span class="first"><a rel="first" href="{{url}}">{{text}}</a></span> | ', 'last' => '<span class="last"><a rel="last" href="{{url}}">{{text}}</a></span>', 'number' => '<span><a href="{{url}}">{{text}}</a></span> | ', 'current' => '<span class="current">{{text}}</span> | ', ]; |
デフォルトのPagenatorの 表示法はリスト形式なので それを変更 {{var}}の記述方法は 変数のplaceholders CakePHP3独自 PaginatorHelper |
アクセス | http://localhost/web3/caketest/neko-lines/ |
コラム 認証Auth使用時のはまる点
|
コラム Googleで検索する時
|
コラム ネット公開時のメモ■CakePHPのトップを見せなくする方法 ■デバック情報を非表示にする方法 ■管理者用ページを作成する方法 app\Controller\AppController.php app\Controller\RelayTeamsController.php
|