CakePHPコントローラの作成

このQ&Aのポイント
  • CakePHPのコントローラの作成方法について教えてください。
  • CakePHPのTestControllerを作成したがページが開かない問題に対して、考えられる原因と解決方法を教えてください。
  • CakePHPのコントローラ作成時にURLの指定方法についても教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数8

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

  • ベストアンサー
  • wave117
  • ベストアンサー率100% (5/5)
回答No.1

TestController内にindexメソッドは作成しましたか? CakePHPはデフォルトでは以下のようにURLに対応するコントローラのメソッドを呼び出します。 http://[CakePHP root]/コントローラクラス/メソッド つまり、http://[CakePHP root]/Test/hogeと書けば、TestControllerクラスのhogeメソッドが呼び出されます。ここでhogeを省略した場合、indexメソッドが呼び出されます。 メソッドの箇所を省略して、NotFoundになっているということはindexメソッドが記述されていない可能性が高いです。 また、コントローラの処理が終了すると、Viewが画面に返されます。 ViewもまたURLに対応していて、http://[CakePHP root]/Test/hogeの場合、View/Test/hoge.ctpが画面に返されます。作成していない場合こちらも作成しましょう。 なお余談ですが、CakePHPを始めたい場合は、リンク先のページよりドットインストールの方がはるかにわかりやすいのでそちらをお勧めします。 ドットインストール CakePHP入門 http://dotinstall.com/lessons/basic_cakephp

sh-yuu
質問者

お礼

ありがとうございます。 解決しました。 結論は、mod_rewriteが動いていませんでした。 以下のエラーが出ていました。 URL rewriting is not properly configured on your server. 1) Help me configure it 2) I don't / can't use URL rewriting レンタルサーバーでApacheの設定変えられないので、 mod_rewriteの変わりをしてくれるというindex.phpを指定したURLにしたら解決しました。 http://xxxxx/index.php/test ⇒ テストページ表示 http://xxxxx/test ⇒ NotFound 教えて頂いたページも参考にCakePHP頑張ってみます。

関連するQ&A

  • 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
  • IISでcakePHP

    現在IIS上でcakePHPを利用してPHPのwebアプリを作成しています。 事情によりrewriteは行わずに作成しているのですが、 URLを指定すると404エラーが返ってきます。 URLは以下です。 http://localhost/test/index.php/posts/index cakePHPはinetpub/wwwroot/test/直下に配置しています。 http://localhost/test/index.php の画面は見れています。 IISでrewriteをせずcakePHPの画面が見れる方法をご存知の方がいましたらご教授願います。 ●環境 windows XP Professional sp3 IIS 5.1 PHP 5.3.5 CakePHP 2.2.2

    • ベストアンサー
    • PHP
  • CakePHPの .htaccess設定について

    CakePHPをVPSで構築したサーバー(Linux)にインストールしました。 .htaccess(mod_rewrite)の設定がうまくいっていないようなので対処の方法を教えてください。 [環境] PHP 5.3.3 Apache 2.3.3 CakePHP 1.3.15 mod_rewriteが動いてるのはチェック用のプログラムで確認しました。 controllerとViewファイルを作り、文字の表示は成功しています。 フォームの実験を行った時にフォーム送信後のURL表示がうまくいっていません。(get/post共に) [書籍を参考にしたプログラム] Sampleコントローラーを作り、Viewの中にSampleディレクトリを作りその中にindex.ctpファイルを設置。フォームにテキストを入力して送信ボタンを押すと、テキストが表示されるプログラムです。 [コントローラー]sample_controller.php class HelloController extends AppController { public $name = 'Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ ~フォームで送られたテキストを表示(プログラムは省略)~ } } [index.ctp]のフォームのHTML <form method="post" action="./sendForm"> ~省略~ <input type="submit" /> </form> http://www.example.com/sampleでフォームを開きテキストを入力して送信ボタンを押すと http://www/example.com/sample/sendForm というURLになるはずなのですが、 http://www.example.com/sendForm となってしまいます。 試しにブラウザから「http://www/example.com/sample/sendForm」というURLを入力してみますと、フォームで入力したデータは表示されませんが、ページ自体は表示されます。 もう一つ、index.ctpの<form method="post" action="./sendForm">のアクションのパスを /sample/sendForm に変更してみますとデータも表示され、求めた結果になります。 以前、別の環境でこのプログラムを動かしたときは、<form method="post" action="./sendForm">のままでうまくいったので、.htaccessのファイルの設定に問題があると予想されます。 下記にcakePHPの設定情報を記載しますので、間違っている部分を指摘していただければと思います。 ※ディレクトリの構成は下記のページの「3.4.3. 高度なセットアップ:その他のインストール方法」を参考にしています。 http://cakephp.jp/old_doc/ch03s04.html [アプリケーションディレクトリ] /home ____/me ________/mysite ____________/config ____________/controllers ____________/models ____________/plugins ____________/tmp ____________/vendors ____________/views ____________index.php ____________.htaccess→「htaccessファイル1」● [公開ディレクトリ] /var ____/www ________/html ____________/example.com→ドキュメントルート _______________/css _______________/files _______________/img _______________/js _______________.htaccess→「htaccessファイル2」● _______________css.php _______________favicon.ico _______________index.php [コアファイルディレクトリ] /usr ____/lib ________/cake ____________/cake ________________/config ________________/docs ________________/libs ________________/scripts ________________app_controller.php ________________app_model.php ________________basics.php ________________bootstrap.php ________________dispatcher.php ____________/vendors ____________/plugins ____________index.php ____________.htaccess→「htaccessファイル3」● 「htaccessファイル1」(アプリケーション) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake/app→■追加  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 「htaccessファイル2」(公開) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On   RewriteBase / →■追加  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------- 「htaccessファイル3」(コア) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake→■追加 RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> -------------------------------------------------- 疑問点は下記のようになっています。 (1)追加した部分のRewriteBaseはこれで良いのか? (2)RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] の部分はこのままで良いのか?webroot部分の変更は必要か? (3)RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]の部分はこのままで良いのか?

    • ベストアンサー
    • 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
  • cakePHP導入 XREA+について

    同じタイトルの質問から、検索して辿り着いたURL http://massat.jp/2007/01/08/110 を参考にXrea+ (有料版)の設定をしています。 しかし、動いてなさげです。 ディレクトリツリー: root / この直下に、cakephpをインストールしました。 次に、 mv -r root/cakephp/app/webroot/* root/public_html/dev.hoge.com/. でファイルを移動。 移動先のdev.hoge.com/index.phpを、 if (!defined('ROOT')) { define('ROOT', DS.'cakephp'); } /** * The actual directory name for the "app". * */ if (!defined('APP_DIR')) { define('APP_DIR', 'app'); } /** * The absolute path to the "cake" directory, WITHOUT a trailing DS. * */ if (!defined('CAKE_CORE_INCLUDE_PATH')) { define('CAKE_CORE_INCLUDE_PATH', ROOT); } と、編集しました。 これでいい筈なので、一緒にパッケージれていたtest.phpも、同じ内容で編集しました。 test.phpを実行させると、次のエラーが出ます。 Warning: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe mode in /virtual/taokato/public_html/dev.bit-station.com/test.php on line 27 Warning: include(cake/bootstrap.php) [function.include]: failed to open stream: No such file or directory in /virtual/taokato/public_html/dev.bit-station.com/test.php on line 84 Warning: include() [function.include]: Failed opening 'cake/bootstrap.php' for inclusion (include_path='/cakephp:/cakephp/app/:.:/usr/local/lib/php') in /virtual/taokato/public_html/dev.bit-station.com/test.php on line 84 Fatal error: CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your /cake core directory and your /vendors root directory. in /virtual/taokato/public_html/dev.bit-station.com/test.php on line 85 これは、設定ミスをしているのでしょうか? 解説通りにしたはずなんですけど・・・。 参考にしたURL http://oshiete1.goo.ne.jp/qa5421358.html http://www.wakatta-blog.com/cakephpxrea.html http://www.cakephp.jp/doc/ch03s04.html#id4797748 http://massat.jp/2007/01/08/110 ご教示のほど、よろしくお願いします。

    • 締切済み
    • PHP
  • CakePHPの表示エラーについて

    --------------------------- CakePHPバージョン:1.3.14. PHPバージョン:5.3.3 Apacheバージョン:2.2.3 --------------------------- CakePHPを始めたばかりです。 インストールを完了し、トップページでのhello world!の表示は出来ました。 (トップページだけは特例のようですね) http://www.example.com/test/hello という形でhello world!を表示させたいと思い下記のようにファイルを作りUPしましたが、エラーが表示されてしまいました。 何を変更すればうまくファイルが表示されるのかを教えていただければと思います。 test_controller.php ---------------------------------------------------------- class TestController extends AppController { public $name = "Test"; public $uses = null; public $autoRender = true; function index(){ } function hello(){ $this->set("content", "Hello World!"); } } ---------------------------------------------------------- http://www.example.com/test/hello (エラーメッセージ) ------------------------------------------------------------------------------- Warning: include(cake/bootstrap.php): failed to open stream: No such file or directory in /var/www/html/example.com/test.php on line 76 Warning: include(): Failed opening 'cake/bootstrap.php' for inclusion (include_path='/var/www:/var/www/html/:.:/php/includes:/usr/share/pear') in /var/www/html/example.com/test.php on line 76 Fatal error: CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your /cake core directory and your /vendors root directory. in /var/www/html/example.com/test.php on line 77 ------------------------------------------------------------------------------- bootstrap.phpというファイル名が出てきているので、bootstrap.phpを見てみましたが何が間違っているのかはわかりません。 include_pathも出てきているので、cakephpのパスを通しておく必要があるのでしょうか? bootstrap.php ------------------------------------------------------------- if (!defined('PHP5')) { define('PHP5', (PHP_VERSION >= 5)); } if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT); require CORE_PATH . 'cake' . DS . 'basics.php'; $TIME_START = getMicrotime(); require CORE_PATH . 'cake' . DS . 'config' . DS . 'paths.php'; require LIBS . 'object.php'; require LIBS . 'inflector.php'; require LIBS . 'configure.php'; require LIBS . 'set.php'; require LIBS . 'cache.php'; Configure::getInstance(); require CAKE . 'dispatcher.php'; ------------------------------------------------------------- (全体の設定状況など) .htaccess httpd.conf あたりの設定が間違っているのかと思い、ネットで情報を調べていろいろ変更したりしてみましたがダメでした。 あと一つ気になる点としては、公開ディレクトリ以外をUPしているディレクトリ名をcakeにしてしまっているところです。(cakeというディレクトリ名はダメとかあるのでしょうか?) ディレクトリの構成と設定の内容を下記に記載します。 [/var/cake]プログラムファイル /var/cake/app /var/cake/plugins /var/cake/vendors /var/cake/.htaccess /var/cake/index.php 公開ディレクトリ(ルート) css files img js .htaccess css.php index.php ############################################################## .htaccessの設定 ############################################################## 3か所ほど設定すべきところがあるようなので下記のように設定しました。 /var/cake/.htaccess ------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on RewriteBase /cake RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> ------------------------------------------------- /var/cake/app ------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on RewriteBase /cake/app  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 公開ディレクトリの.htaccessの設定 ------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\.(cgi|css|gif|jp?g|png)$ RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------

    • ベストアンサー
    • 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で特定ファイル表示(htaccess

    CakePHPではURLを一度index.phpにリダイレクトするような作りになっていますが、Googleの検索エンジン用のsitemap.xmlファイルを公開ディレクトリに置いた場合、そのファイルだけはmod_rewriteのルールから外して、普通にブラウザで見れる状態にしたいです。 .htaccessをどのように設定すれば良いか、教えてください。 なお、CakePHPのindex.phpファイルと.htaccess、sitemap.xmlは同じディレクトリに置いてあります。 [環境]CakePHP 1.3 PHP5.3 現在は.htaccessは以下のように設定されています。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> 上記の RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] の前の行に RewriteCond %{REQUEST_FILENAME} ^sitemap.xml を入れるとこのファイル自体はブラウザから見れるようになりますが、サイトのトップページ以外を見ようとすると、「Not Found」が返ってきてしまいます。

    • ベストアンサー
    • PHP
  • cakephp HTTP403エラー

    初心者ですが、レンタルサーバーを変更し、cakephpを利用している既存のデータ等をそのまま新しいサーバーに移動したのですが、URL:hhtp://www.○○○.jpでHTTP403のエラーが出てしまいます。 但し、URL:hhtp://www.○○○.jp/cakephp/ ではエラーは出ず、レイアウトがズレて表示されます。(CSSのパスの原因で)。またデータベースのデータも表示されます。 CAKEPHPはドメイン直下に配置し、webrootもフォルダ内にあります。 レンタルサーバのため、apacheの編集もできません。(ディレクトリの変更などもできません) いろいろ調べて、cakephp内の3つの「.htaccess」のmod_rewrite、app/temp/のパーミッション等の変更も試しましたが、うまくいきません。 HTTP403のエラーの回避方法を教えてください。よろしくお願いいたします。 ・APACHE :2.x ・PHP    :5.3 ・MYSQL  :5.1

専門家に質問してみよう