1

私はroutes.phpに独自のルーティングルールを持っています。これは、mywebsite /blog/やmywebsite/blog / category / category-nameなど、URL経由でアクセスできるすべてのページに対して定義されています。つまり、Webサイト全体の構造は私のカスタムルート。

今、私はrequestActionを利用する要素がたくさんあります。

       $websiteabstract = $this -> requestAction(array(
        'controller' => 'assets',
        'action' => 'displayHomeAbstract'
       ));

これにより、エラーエラーが発生します:コントローラーが見つかりませんでした。おそらく/ Assets/displayHomeAbstractのルートを定義していないためです。しかし、コントローラーの名前とアクションを明示的に指定するときに、なぜそのためのカスタムルートを定義する必要があるのでしょうか。それはルーティングを完全にバイパスするべきではありませんか?ルーティングについてもまったく理解していません。または、routes.phpですべての可能なルート(requestActionによってのみ使用されるルートも含む)を本当に定義する必要がありますか?つまり、要素を介してのみ、ユーザーがmywebsite / Assets/displayHomeAbstractに直接アクセスできるようにしたくありません。

ありがとうございました

編集:これが私のroutes.phpですhttp://pastebin.com/aAKBwNZJ 行128を見てください。/assets/displayHomeAbstractはrequestActionを介してのみアクセスされるため、これはまさに私が望まないことです。

編集:そしてこれはリクエストを行う要素です:http://pastebin.com/0tK5dYJk

4

3 に答える 3

2

さて、IRCの開発者との広範な議論の後、私はあなたに説明するのに十分にこれを理解していると思います:

この場合、requestActionのカスタムルートを定義する必要があります。requestActionは完全なリクエストをエミュレートしています。提供されたURLが配列の場合でも、毎回文字列urlを使用してアクセスされたかのようにリクエストをディスパッチします。この本は、デフォルトルート(routes.phpの最後の行)を使用することに加えてカスタムルートを定義する場合に、配列URLを使用してそれらのルートに依存しないようにする方法について言及しています。ただし、これらの配列URLは、/ lib /フォルダー内のデフォルトのroutes.phpに依存しており、URL文字列を作成するために使用されます。カスタムルーティングパターンを使用する場合は、独自にURL文字列を作成する必要があります。

注:以下のコメントは、この回答の以前のバージョンからのものです。

于 2012-06-23T16:35:17.083 に答える
1

問題の鍵は、Cakeのルーティングの範囲とその仕組みを理解することです。

CakePHPでルートを定義するとき、それはURLをコントローラーにマッピングするためだけに使用されるのではありません。また、リンクアドレスの生成や、この場合、 requestAction()に提供されたパスのコントローラーへのマッピングなどの目的でルーターによって使用されます。舞台裏では、Cakeはパラメータに基づいてURL文字列を作成し、それをルーターに渡して正しいコントローラーを見つけます。そのようなルートが存在しないため、失敗します。

解決策として、実際にはそのロジックにコントローラーを使用しないことをお勧めします。それが何をするかに応じて、コンポーネントまたはヘルパーがより良い場所である可能性があります。

于 2012-06-23T17:25:24.137 に答える
0

156行目を見てください。CakePHPのデフォルトルートをロードする行をコメントアウトしました。

于 2012-06-23T17:38:33.507 に答える