- 更新日: 2016年2月13日
- PHP & CakePHP
CakePHPで404などエラーページを表示
CakePHP3で404 Not Found などエラーページを表示する方法です。CakePHP でのエラーハンドリングについては、以下の公式ドキュメントが分かりやすい。
Error & Exception Handling – CakePHP Cookbook 3.x documentation
— 環境 —
PHP 5.5.19
CakePHP 3.1.1
用意されているビルトインのエラーハンドリング用の例外クラスは、以下で確認できます。
Built in Exceptions for CakePHP / Error & Exception Handling – CakePHP Cookbook 3.x documentation
CakePHP のバージョン次第ではありますけれど、400系 〜 500系 エラーを処理するための各種例外クラス(Exception)が用意されています。
404 エラー表示(404 Not found error)のサンプルコード
以降、404 Not found error を表示する例のサンプルコードです。Cake\Network\Exception\NotFoundException の例外クラスを利用します。
コントローラーのコード。
src/Controller/UsersController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Controller; use Cake\Network\Exception\NotFoundException; class UsersController extends AppController { public function view($id = null) { $user = $this->Users->findById($id)->first(); if (empty($user)) { throw new NotFoundException(__('User not found')); } $this->set('user', $user); $this->set('_serialize', ['user']); } } |
ユーザーが見つからなかった場合に、NotFoundException 例外を発生させるようにしました。
error400.ctp テンプレートを編集
続いて、テンプレートのコード。404 エラーを表示するための error400.ctp テンプレートを作成する。デフォルトで用意されていたので、その中身を編集しました。
src/Template/Error/error400.ctp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $this->layout = ''; ?> <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>404: Not Found</title> </head> <body> <div style="text-align:center; margin-top: 30px;"> <p> 404: Not Found<br /> お探しのページが見つかりません。 </p> <p><a href="/">TOPへ</a></p> </div> </body> </html> |
以上で、ユーザーが見つからなかった場合は、404 エラーページが表示されるようになります。
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!