5

この件に関して他にもいくつかのトピックがあることは知っていますが、どれも私のニーズに合わないようです。

私が持っているもの

  • example.com/log/
  • LogsController.php

私はLogsController代わりにLogController(複数形) を持っています。なぜなら、CakePHP はコントローラを複数形で持つことを望んでいるからです。

しかし、ご存じ/お気づきかもしれませんが、URL に「s」がないため、example.com/log/決して使用しません。LogsController

今、私は/log/*にリダイレクトされたいです/logs/*。次のコードで問題なく動作します。

Router::connect ('/log/*', array('controller'=>'logs'));

しかし、アクセスしようとするexample.com/log/actions/foo/barと、うまくいかないようです。それで、いくつかのグーグル検索の後、私はこれを見つけました:

Router::connect ('/log/:action/*', array('controller'=>'logs'));

よく働く。しかし、example.com/log/ に再度アクセスしようとすると、次のように表示されます

エラー: LogController が見つかりませんでした。

質問だから私の質問は、使用しようとする代わりに/log/使用する ように、どのように自分の URL のエイリアスを設定するかです。LogsControllerLogController

flight => FlightsControllerのように、これを変更したいコントローラーが他にもいくつかありますprofile => ProfilesController


この質問を見てください。同じテーマですが、少し違います。それは何らかの形であなたを助けるかもしれません。

4

4 に答える 4

10

わかりました、IRC などの他の人々の助けを借りて。以下のことがわかりました。

の組み合わせ

Router::connect('/flight/:action/*', array('controller'=>'flights'));
Router::connect('/flight/*', array('controller'=>'flights'));

トリックを行います。以前にこれを試しましたが、次のように別の順序で試しました。

Router::connect('/flight/*', array('controller'=>'flights'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));

これは機能しません。

したがって、この投稿の最初の 2 行のコードで解決しました。別の人は、Arun Jain の解決策は適切な解決策ではないと私に言いました。FormsHelper とそのようなクラスで問題が発生します。したがって、この投稿のコードを好むと思います。これは、スクリプトのコアを変更する部分ではなく単なるエイリアスであるためです。とにかく助けてくれてありがとう。

于 2012-08-13T14:30:51.450 に答える
1

ルーティングでこれを行うには、正しいアプローチは次のとおりです。

Router::connect('/flight', array('controller'=>'flights','action'=>'index'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));

これは、それを使用するアクションがURLで見つかったが、パラメーターが見つからなかった場合、デフォルトではインデックスアクションを使用することをルーターに通知します。

于 2012-08-13T14:52:51.423 に答える
0

私はこれらすべてについて少し違った見方をしています。多くの場合、複数形の方が正確な方法ですが、複数形がまったく間違っている場合は、Inflectorクラス(/ lib / Cake / Utility / Inflector)に例外を追加します。

あなたの例では、この単語logのリストに追加します。uninflectedこれは、システム全体のケーキが「s」を追加しないことを意味します。LogControllerビューはLogビューフォルダなどに配置されます...

編集

私はこれを内部から行うためのはるかにきちんとした方法に出くわしましたapp/config/bootstrap.php

Inflector::rules(
    'plural',
    array(
         'uninflected' => array('log')
    )
);

これによりlog、バージョンの更新を容易にするためにCore内のファイルを変更することなく、影響を受けていないリストに追加されます。

于 2012-10-18T14:44:05.237 に答える
-1

以下を使用して簡単に実行できます。

class LogsController extends AppController
{
public $name = 'Log';
..... YOUR REMAINING CODE ......
}

ルーターの接続コードは変わりません。うまくいかない場合は、お気軽にお問い合わせください。

于 2012-08-13T04:36:05.817 に答える