0

私はcakephp1.3を使用しています。これが私の問題です:

「learns」という名前のコントローラーと「classroom」という名前のメソッドがあります。

教室の方法にアクセスするには、次のリンクを使用します:http ://www.url.com/learns/classroom/15

私はそれをこのようにしたかった:http ://www.url.com/class/15

そして、これは私がルートを設定する方法です:

Router::connect('/:class/:id', array('controller' => 'learns', 'action' => 'classroom'), array('id' => '[0-9]+'));

なぜそれが機能しないのか、私にはよくわかりません。ドキュメントを読み、このソリューションをクックブックからコピーしました。

よろしくお願いします。

4

1 に答える 1

1

Router ステートメントに問題はありません。「 /class/:id 」ではなく/:class/:idが実際に必要かどうかはわかりませんが。違いを見ます?2 番目のバージョンではコロンが欠落しています。

これは、/class/[an-id] で始まるすべてのリクエストをルールにマップする必要があることを Router に伝えます。/:class として持つのは、ルーターに引数を渡すことを意味します。/foo/15または/bar/ 15 のいずれでもかまいません。これらの引数は、$this->params['class']および$this->params['id']で使用できます。このルールを前提として -> / :クラスID

あなたの質問では、「なぜ機能しないのかよくわかりません」と述べています。実際の問題については何も述べていないため、この種の記述は避けてください。

代わりに、何を期待していたか教えてください。そして、代わりに何を見ましたか?エラーでしたか?それとも警告?別のアクションが実行されたなど、まったく別の何かが表示される場合は、おそらくルーターが実際にどのように機能するかが原因です。貪欲なルートと次のような通常のルートがある場合:

/users/* および /users/:id

2 番目の URL は、最初のルーティング ルールが false を返さない限り、/users/* が貪欲であり、すべてのリクエストを自分自身に独占するため、どのリクエストにも一致しません。

これがあなたの状況である場合は、カスタム ルート クラスの作成方法を読むことをお勧めします。要約すると、カスタム ルート クラスは貪欲なルートを貪欲にしないようにします。より良い説明については、マークストーリーによる優れた記事があります: http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

Cakephp でのルーティングは、最も紛らわしいトピックの 1 つであり、理解するまでに時間がかかる場合があります。クックブックはあなたの親友です。ルーティング ルールで各ルーティング要素が何をするかを確認するまで、すべてを読んで再読します。

于 2012-09-12T23:21:37.677 に答える