CakePHPのAppControllerについて

このQ&Aのポイント
  • CakePHPのAppControllerクラスに処理を記述しようとしても呼び出されない問題について
  • CakePHP 1.3のバージョンでAppControllerクラスを設置し、beforeFilter()メソッドを使用しているが、期待した通りに動作しない
  • 原因が分からず調査しているが、解決策が見つかっていない
回答を見る
  • ベストアンサー

Cakephp AppControllerについて

CakePHPにて、 AppControllerクラスに処理を記述しようと思い、 app/app_controller.php を設置したのですが、 app/app_controller.php がどうしても呼び出されません。 色々調べてるのですが、どうしても原因が分かりません。 原因等分かる方がおりましたら教えて頂けますでしょうか? ---------------------- ■cakephpのバージョンは1.3です。 ■app/app_controller.phpの中身は↓です。 class AppController extends Controller { function __construct() { parent::__construct(); } function beforeFilter() { echo "test"; ←これが呼ばれない。 } } ----------------------

  • PHP
  • 回答数4
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Dags
  • ベストアンサー率78% (11/14)
回答No.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が正式にリリースされたら、それに移行するのも「あり」かと思います。 がんばってください。

__kou__
質問者

お礼

色々ご回答ありがとうございました。 大変助かりました。 まずは1.3で開発していき、2.0の情報が多くなった段階で2.0に移行しようと思います。

その他の回答 (3)

  • Dags
  • ベストアンサー率78% (11/14)
回答No.3

違うディレクトリーにあるAppController が呼び出されているのかな。 app/app_controller.php のファイルにPHPエラーがでるような処理を組み込んで、PHPエラーがでますか? ちなみに、[app/直下|app/libs/|app/controllers/] に[app_controller.php] が無ければ、デフォルトの[cake/libs/controller/app_controller.php] が呼ばれます。

__kou__
質問者

補足

ご回答ありがとうございます。 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)
回答No.2

class HelloController extends AppController { public $uses = null; public $autoRender = false; function index() { echo 'hello world!'; } function beforeFilter() {  parent::beforeFilter(); } } このようにしてますよね?

__kou__
質問者

補足

ご回答ありがとうございます! コントローラは↓のように作っております。 $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)
回答No.1

AppControllerを継承するコントローラクラスに、 function beforeFilter() {  parent::beforeFilter(); } を記載してください。 オーバーライドするだけです。

__kou__
質問者

補足

ご回答ありがとうございます! app/app_controller.php を設置し、 ↓の記述をしているのですが、 function beforeFilter() {  parent::beforeFilter(); } そもそもapp/app_controller.phpに通っていないようです。 function beforeFilter() {  parent::beforeFilter(); echo "test";exit; // ←←★ } のようにechoしても、何も表示されないのです。。

関連するQ&A

  • CakePHPのコントローラの作成

    PHP初心者です。 CakePHPをインストールし試しにTestControlerを作成したのですが、ページが開きません。 PageNotFoundになります。 考えられる原因が分かれば教えて下さい。 【やったこと】 ・ [CakePHP root]\app\Controller に TestController.php を作成。 <?php App::uses('AppController', 'Controller'); class TestController extends AppController { } ・ URLにアクセス http://[CakePHP root]/Test ⇒ Not Found http://[CakePHP root]/test ⇒ Not Found http://[CakePHP root]/app/webroot/index.php?url=test ⇒ CakePHPのindex.phpが表示される。 http://[CakePHP root]/app/webroot/index.php?url=Test ⇒CakePHPのindex.phpが表示される。 以下のサイトを参考にしました。mod_rewriteが動いていない可能性がある ということなので、URL直接指定もしてみましたがダメでした。 http://codezine.jp/article/detail/768?p=2 よろしくお願いします。

    • ベストアンサー
    • PHP
  • CakePHPのredirect()関数について

    <?php App::uses('AppController', 'Controller'); class DayController extends AppController{ public function index(){ $this->autoRender = false; $date = new DateTime(); $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); $str = $date->format("H:i:s"); $this->redirect("./other/".urlencode($str)); } public function other($param){ $this->autoRender = false; $str = urldecode($param); echo '<html><head><title>現在時刻</title>'; echo '<meta charset="UTF-8"></head>'; echo '<body>'; echo '<h1>現在の時刻は、'.$str. 'です。</h1>'; echo '</body></html>'; } } ?> 上記のようなスクリプトをApacheのhtdodos./cakephp/App/Controller フォルダに入れて 動作させると、下記のようなエラーが出力されます。 redirect() 関数の引数がおかしいようですが、どこがどうおかしいのか 教えていただけませんか。 Warning (2): Missing argument 1 for DayController::other() [APP\Controller\DayController.php, line 14] Notice (8): Undefined variable: param [APP\Controller\DayController.php, line 16]

    • 締切済み
    • PHP
  • CakePHP redirect関数の文法

    <?php App::uses('AppController', 'Controller'); class DayController extends AppController{ public function index(){ $this->autoRender = false; $date = new DateTime(); $date->setTimeZone(new DateTimeZone('Asia/Tokyo')); $str = $date->format("H:i:s"); $this->redirect("./other/".urlencode($str)); } public function other($param){ $this->autoRender = false; $str = urldecode($param); echo '<html><head><title>現在時刻</title>'; echo '<meta charset="UTF-8"></head>'; echo '<body>'; echo '<h1>現在の時刻は、'.$str. 'です。</h1>'; echo '</body></html>'; } } ?> 上記のようなCakePHPのスクリプトにおいて、下記のようなエラーが返ってきます。 Warning (2): Missing argument 1 for DayController::other() [APP\Controller\DayController.php, Notice (8): Undefined variable: param [APP\Controller\DayController.php, redirect()関数の引数がおかしいのでしょうか。

  • CakePHPでのログイン画面生成について。

    CakePHPでのログイン画面生成について。 参考URLは以下です。 http://h2o-space.com/blog/1950 以上の記事の通り設定・アップロードをし、 add.phpにアクセスすると Missing Method in ViewsController Error: The action add.php is not defined in controller ViewsController Error: Create ViewsController::add.php() in file: app/controllers/views_controller.php. <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> とのエラーが出ます。 <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> をviews_controller.phpに書き込むと Parse error: syntax error, unexpected '.', expecting '(' in /home/rslitefc2/users/アカウント/public_html/login/app/controllers/views_controller.php on line 7 と、エラーが出ます。 7行目の記述はfunction add.php() {です。 どうしたらログイン画面を正しく生成することが出来るでしょうか? どなたかお教えいただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • CakePHPでヘルパーが使えません

    CakePHPを使用して開発を行っています。 app/views/helpers/common_lib.php に、class CommonLibHelper extends AppHelper としてヘルパークラスを作り、コントローラーの$helpersにarray('CommonLib')を記述しました。 ビューファイルにて、$common_lib->function() として、ヘルパーで定義したメソッドを呼ぶと、 undefined variable: common_libと言われてしまいます。どうしてか教えていただけませんか? クラス名やファイル名は合っていると思うのですが・・・。 CakePHPのバージョンは、1.3.6です。

    • ベストアンサー
    • PHP
  • Cakephp2.0で、PhantomJs

    Cakephp 2.0のConsole/Commandで、スクレイピングを行う処理を実装しようとしています。 PhantomJsを使おうとしていますがどうもうまくいきません。 composerを利用してPhantomJsを、 /XAMPP/xamppfiles/htdocs/cakephp/app/Vendor にインストールしました。 ”/XAMPP/xamppfiles/htdocs/cakephp/app/” に test.phpとして、 <?PHP require_once('vendor/autoload.php' ); use JonnyW\PhantomJs\Client; $client = Client::getInstance(); $client->getEngine()->setPath('vendor/bin/phantomjs'); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $request->setMethod('GET'); $request->setUrl('https://pg.kdtk.net/sample/phamtomjs_test.html'); $client->send($request, $response); echo "request url: " . $request->getUrl() . "\n"; echo "response: " . $response->getStatus() . "\n"; if($response->getStatus() === 200) { echo "content: \n"; echo $response->getContent(); } ?> というサンプルプログラムを実行するとうまくいきました。 これを、Console/Commandで実装したいのですが、どのように実装したら良いかわかりません。 例えば /XAMPP/xamppfiles/htdocs/cakephp/app/Console/Command に、 SampleShell.php として保存し、 <?php class SampleShell extends AppShell { public function startup() { parent::startup(); App::import('Vendor', 'Client', array('file' => 'JonnyW/PhantomJs/Client.php')); } // メイン実行関数 public function main() { $client = Client::getInstance(); } } ?> php cake.php Sample を実装すると、 PHP Fatal error: Class 'Client' not found ・・・ とエラーとなります。 インスタンスを生成できるようにするにはどのようにすれば良いのでしょうか? ご教示いただきますよう、何卒宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • cakephp エラーハンドリングができません

    cakephpを利用しているシステムで、2種類のエラーを作っておいてcontrollersの呼び出しで振り分けたいと思いますがうまくできません。 マニュアルページ(http://book.cakephp.org/ja/view/154/Error-Handling)を参考に、 app/app_error.phpを以下のように作成しました。 ((1)エラー:error(2)エラー:errorsta) ----------------------------------------------------------------- <?php class AppError extends ErrorHandler{ function error(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('error'); } function errorsta(){ $this->controller->viewPath = 'errors'; $this->__outputMessage('errorsta'); } } ?> ----------------------------------------------------------------- 上記内容で、メソッドerrorは実行できるのですが、errorstaが一向に動いてくれず、404扱いになってしまいます。 app/app_error.php以外にも設定が必要なものがあるのでしょうか?

    • 締切済み
    • PHP
  • Codelgniterのコンストラクタ記述方法

    PHP5 で Codelgniter (Ver2.0.3-1) を使用してコンストラクタを書く方法につきお尋ねします。 ある参考書で Codelgniter の使用法を学習していますが、その本のフォーム処理のためのコントローラーの例文として下記の記述があります(一部要約)。 Class Form extends Controller { function Form(){ parent:: Controller(); $this->load->helper('url'); $this->load->library('form_validation'); $this->form_validation->set_rules('name', '名前', required); } } ところがこのコンストラクタは PHP4 形式で記述しているとの注記が付いています。 このコンストラクタを PHP5 形式で Codelgniter (Ver2.0.3-1) を使用して書くにはどのようにすれば良いでしょうか? ネスト形式で次のようにすれば良いですか? Class Form extends CI_Controller { function Form(){ public function __construct(){ parent:: construct(); } $this->load->helper('url');   中略 } }

    • ベストアンサー
    • PHP
  • cakePHPでSQLが実行できない。

    cakePHP2.2でSQLが実行できません。 実行のやり方が悪いのでしょうが ネットで探してもイマイチ理解できません・・ やりたいのは画面から入力された値を使い SQLを実行することです。 何が駄目なのか教えてください。 controllerのソース <?php class BuhinController extends AppController { public $layout = 'user_default'; //## ログイン処理 public function login(){ $bool = false; $rslt = null; Configure::write('debug', 1); $sql = "select id from table_user where add = '". $_POST["add"] . "' "; $sql = $sql. " and pass = '". $_POST["pass"] . "'"; $this->query($sql); } public function index(){ } public function logout(){ $this->Auth->logout(); } } ?> エラーメッセージ Fatal Error Error: Call to undefined method BuhinController::query() File: C:\xampp\htdocs\cake\app\Controller\BuhinController.php よろしくお願いします。

    • ベストアンサー
    • PHP
  • CakePHPでディレクトリ分けをしたい

    CakePHP2.3.4、サーバーはロリポップにて開発を行っております。 やりたいことは、コントローラーのディレクトリ分けです。 以下のようなディレクトリ構造にして、 app  |_Controller  |   |_admin  |    |    |_LoginController.php  ※メソッドはindex()のみと仮定  |    |    |_・・・.php  |    |  |    |_ListController.php  ※メソッドはindex()のみと仮定  |  |_View ※Viewも分けますが、今は省略しています。 アプリケーション「LoginCntroller.php」にアクセスする場合は http://○○.ne.jp/admin/login/index アプリケーション「ListController.php」にアクセスする場合は http://○○.ne.jp/list/index でアクセスしたいです。 自分なりに調べて、「bootstrap.php」に以下追加、 App::build(array(  'Controller' => array(ROOT.DS.APP_DIR.DS.'Controllers'.DS.'Admin'.DS,) )); 「route.php」に以下追加、 Router::connect('/admin/login', array('controller' => 'login', 'action' => 'index')); などと行ってみてはいるのですが、結果、以下のエラーになってしまいます。 Missing Controller Error: AdminController could not be found. Error: Create the class AdminController below in file: app/Controller/AdminController.php <?php class AdminController extends AppController { } Controller直下に配置したアプリケーションに関しては問題なく実行されます。 何が悪いのか見当もつかず困っております。 よろしければご教授いただけませんでしょうか。

    • 締切済み
    • PHP

専門家に質問してみよう