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= 'ログインしてください'; } }