- ベストアンサー
CakePHPのAppControllerについて
- CakePHPのAppControllerクラスに処理を記述しようとしても呼び出されない問題について
- CakePHP 1.3のバージョンでAppControllerクラスを設置し、beforeFilter()メソッドを使用しているが、期待した通りに動作しない
- 原因が分からず調査しているが、解決策が見つかっていない
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Ver1.3の仕様でコメントしてましたが、Ver2.0 RCでしたか。 こちらの無駄なコメントでしたね。 >3)のAppController.phpは呼ばれているようです。 これで解決しましたね。 Ver.2.0の仕様はVer1.3と違います。(命名規則など 当方Ver2.0の仕様は完全に把握していない為、これ以上のサポートは無理なので、ご了承ください。 これから即開発する場合ならVer1.3で、これから勉強するのなら、Ver2.0をお勧めします。 大きく仕様が変わりますが、Ver1.3からVer.2.0の移行手順が公開されるかと思いますので、情報量が多いVer1.3を学習し、Ver2.0が正式にリリースされたら、それに移行するのも「あり」かと思います。 がんばってください。
その他の回答 (3)
- Dags
- ベストアンサー率78% (11/14)
違うディレクトリーにあるAppController が呼び出されているのかな。 app/app_controller.php のファイルにPHPエラーがでるような処理を組み込んで、PHPエラーがでますか? ちなみに、[app/直下|app/libs/|app/controllers/] に[app_controller.php] が無ければ、デフォルトの[cake/libs/controller/app_controller.php] が呼ばれます。
補足
ご回答ありがとうございます。 cakephpのバージョンについて、1.3と申し上げましたが、 再度確認したところ、2.0.0-RC1 でした。 申し訳ございません。。 特にバージョンが2.0じゃなければいけない理由が無いので、 1.3をインストールし直した方がいいでしょうか? 一応、現状調べた結果は↓です。 >app/app_controller.php のファイルにPHPエラーがでるような処理を組み込んで、PHPエラーがでますか? 色々試しましたが、PHPエラーは出ませんでした。 [cake/libs/controller/app_controller.php] は無いのですが、 ドキュメントルート直下で find . -type f -name "*"php | xargs grep -l "class AppController" をしたところ↓の4ファイルが出てきました。 1)./app/app_controller.php 2)./lib/Cake/Console/Templates/skel/Controller/AppController.php 3)./lib/Cake/Controller/AppController.php 4)./lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php 3)のAppController.phpは呼ばれているようです。 (echo したら表示されました。)
- Dags
- ベストアンサー率78% (11/14)
class HelloController extends AppController { public $uses = null; public $autoRender = false; function index() { echo 'hello world!'; } function beforeFilter() { parent::beforeFilter(); } } このようにしてますよね?
補足
ご回答ありがとうございます! コントローラは↓のように作っております。 $autoRender = false は記述しておりませんでしたので記述したところ 画面が真っ白になったため、ひとまずコメントしてます。 <?php class RanksController extends AppController { var $name = 'Ranks'; var $uses = array( 'Rank' ); var $helpers = array( 'Html', 'Form' ); var $components = array(); //public $autoRender = false; function beforeFilter() { parent::beforeFilter(); } function index( $date = null ) { // 処理 } } ?>
- Dags
- ベストアンサー率78% (11/14)
AppControllerを継承するコントローラクラスに、 function beforeFilter() { parent::beforeFilter(); } を記載してください。 オーバーライドするだけです。
補足
ご回答ありがとうございます! app/app_controller.php を設置し、 ↓の記述をしているのですが、 function beforeFilter() { parent::beforeFilter(); } そもそもapp/app_controller.phpに通っていないようです。 function beforeFilter() { parent::beforeFilter(); echo "test";exit; // ←←★ } のようにechoしても、何も表示されないのです。。
お礼
色々ご回答ありがとうございました。 大変助かりました。 まずは1.3で開発していき、2.0の情報が多くなった段階で2.0に移行しようと思います。