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>