CakePHP1.3.6:AppController.phpをカスタマイズする。

先のログでAuthを使って、全てのコントローラーでログインチェックを行うことにした。
これは、面倒くさい。DRYじゃない。ということで、コントローラーのスーパークラスであるAppController.phpに設定してしまう。

AppController.phpは、/cake/libs/controllerを参照しているが、開けてビックリ。中身は空っぽ、つまり、拡張することが前提になっている。
同じものが、/cake/console/templates/skelにあるので、コピーして、/app/controllersにおく。

中身は以下のようにした。

注意は、下の書き方をしてしまうと、$componentsを上書きしてしまうので、Sessionといったデフォルトで使えるコンポーネントが使えなくなってしまうこと。

これで、いちいち定義をする必要がなくなった。

<?php
/**
 * Application level Controller
 *
 * This file is application-wide controller file. You can put all
 * application-wide controller-related methods here.
 *
 * 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.app
 * @since         CakePHP(tm) v 0.2.9
 * @license       MIT License (http://www.opensource.org/licenses/mit-license.php)
 */

/**
 * Application Controller
 *
 * Add your application-wide methods in the class below, your controllers
 * will inherit them.
 *
 * @package       cake
 * @subpackage    cake.app
 */
class AppController extends Controller {
	public $layout 		= 'myznala';
	// componentsを上書きしてしまうので、デフォルトのコンポーネント
	// を設定する必要がある。
	public $components 	= array('Auth','Session');
	
	function beforeFilter(){
		$this->Auth->authError= 'ログインしてください';
	}
	
}