CakePHP 1.2 から 1.3 に、アプリケーションを移行しようとしています。


しかし、
”Error: Create the class SamplesController below in file: app\controllers\samples_controller.php”
とエラー表示されて、アプリケーションは正しく動作しません。

cake本体を設置したフォルダの app\controllers 下部には
samples_controller.php
が正しく設置され、
クラス名も下記のように正しく記入されています。

<?php
class SamplesController extends AppController {

var $name = 'Samples';
}
?>

プリフィックスルーティング関連の問題かと考え、
core.phpに下記を追加しましたが、動作は変わりません。
(このアプリケーションは、adminルーティングを利用しています)
Configure::write('Routing.admin', 'admin');


そんなに複雑なことをしているアプリケーションではないので、
単純なポイントだと思います。
この問題を解決するために、何かヒントを頂けましたら有難く存じます。


環境は、下記の通りです。
Windows XP Professional SP3
xampp 1.7.2


どうぞよろしくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2010/06/15 19:55:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント60pt

まず、エラーとは関係がありませんが、「Routing.admin」は非推奨になったそうです。

Router

Routing.adminは非推奨となりました。これはprefixが異なるルーティングの方式では、矛盾した振る舞いを提供していました。代わりにRouting.prefixesを使用すべきです。1.3のprefixルートは手動でルート定義を追加する必要がありません。全てのprefixルートは自動で生成されます。シンプルに変更するには、core.phpを変更してください。

http://book.cakephp.org/ja/view/1561/Migrating-from-CakePHP-1-2-...

そのまま上記のページの解説の続きを確認してください。

また、ルーティングパラメータに小さな変更があります。ルーティングパラメータは今や英数字と「-」、「_」または/[A-Z0-9-_+]+/から成るべきです。

Router::connect('/:$%@#param/:action/*', array(...)); // BAD

Router::connect('/:can/:anybody/:see/:m-3/*', array(...)); //Acceptable

1.3のために、Routerの内部はパフォーマンス向上とコードの乱雑さを減らすために大規模に書き直されました。この副作用として、コードの基幹部分にあることと引き換えに、問題的でありバグを引き起こしやすかった二つのまれにしか使われない機能が削除されました。まず、フル正規表現を使うパスセグメントが削除されました。もう次のようなルートは作れません。

Router::connect('/([0-9]+)-p-(.*)/', array('controller' => 'products', 'action' => 'show'))

上記の変更が原因になっていると思います。

「routes.php」の記述を見直してみてください。

  • id:rouge_2008
    ※少しだけ書き直して再投稿しています。

    原因は分かりましたか?
    いろいろ試してみたのですが、こちらでは同様の状態でのエラーは発生しないため、はっきりとした原因はつかめません。
    他にも1.3(安定版)で動作しないルーティングの設定を見つけましたので、一応ご報告します。

    Router::connect('/m/:controller/:action', array('prefix' => 'mobile', 'mobile' => true));

    ※urlとprefixを同じにして「Router::connect('/mobile/:controller/:action', array('prefix' => 'mobile', 'mobile' => true));」のようにすると動作しますが、routes.phpに設定するよりcore.phpの方で、「Configure::write('Routing.prefixes', array('admin', 'mobile'));」のようにする方が良さそうです。(※モバイル用にルーティング設定している場合)


    他には回答に記載したページでも説明されていますが、次のようなルートの中間でのワイルドカードのサポートは削除されています。

    Router::connect(
    '/pages/*/:event', ~


    「http://www.example.com/samples」にアクセスした場合に『Error: Create the class SamplesController below in file: app\controllers\samples_controller.php』が発生するのでしょうか?
    それとも「http://www.example.com/admin/samples」にアクセスした場合にエラーが発生するのでしょうか?
    もう少しエラー発生状況や使用している機能等を出した方が、分かる人がいるかもしれません。
  • id:ita07
    やはり、
    routes.php
    の記述に問題があった模様です。
    cakeを全てhtdocs下部に配置し、routes.php を修正することで
    正しく動作しました。
    親切にご対応頂きまして、誠に有難うございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません