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
|