CakePHP1.3.6:間違ったURLを叩かれた場合の対応。
こちらの記事の方がシンプルですね。どうもありがとうございました。
====================================================================
よく間違ったURLを叩くと、以下のような画面が現れる。
とっても親切に、コントローラーがないよ、とか、アクションがないよ、とか言って開発者を導いてくれる。(それと同時に、この画面を消すには…というメッセージも表示される)
間違ったURLを叩かれた場合に、このメッセージが出てしまうと、本稼働をする際にセキュリティー的によろしくないので、これが出ないようにする。
ここでは、まず、以下のようなMainプログラムを作る。
そして、間違ったURLを叩かれたときに以下のような画面に遷移するようにする。
Mainプログラムの作成
コントローラー(/app/controllers/main_controller.php)は以下。
<?php class MainController extends AppController{ public $name = 'Main'; public $uses = null; public $layout = 'myznala'; /** * * 初期画面 */ function index(){ $this->set('title_for_layout', "メインメニュー"); } } ?>
ビュー(/app/views/main/index.ctp)は以下。
<h1>メイン・メニュー</h1> <br> <?php echo $html->link('顧客管理', array('controller'=>'customers', 'action'=>'index')); ?>
エラーページの作成
/app/views/errorsの下に、missing_action.ctp、missing_controller.ctpを作成する。ソースはともに以下。
<h1>エラー</h1> <br> URLに誤りがあります。 <?php echo $html->link('トップへ', array('controller'=>'main', 'action'=>'index')); ?>
デフォルトのレイアウトの作成
ここでデフォルトのレイアウトを変更しないと、CakePHPのデフォルトのレイアウトが上の(エラーの)ビューに適用されてしまう。これもセキュリティー的によろしくない。そこで、このアプリケーションで利用するデフォルトのレイアウトを変更する。
/cake/libs/view/layouts/default.ctpを、/app/views/layouts/default.ctpにコピーし、以下のように変更する。
<?php /** * * PHP versions 4 and 5 * * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) * * Licensed under The MIT License * Redistributions of files must retain the above copyright notice. * * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) * @link http://cakephp.org CakePHP(tm) Project * @package cake * @subpackage cake.cake.libs.view.templates.layouts * @since CakePHP(tm) v 0.10.0.1076 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php echo $this->Html->charset(); ?> <title> <?php echo $title_for_layout; ?> </title> <?php echo $scripts_for_layout; ?> </head> <body> <div id="container"> <div id="content"> <?php echo $this->Session->flash(); ?> <?php echo $content_for_layout; ?> </div> <div id="footer"> </div> </div> </body> </html>