Cake の RequestHandler の動作方法に関する私の誤解に関連していることが判明した今週まで、いくつかのエラーが発生し始めましたが、まだ適切な回避策を見つけていません。
1 つの方法を使用して、さまざまな形式のコンテンツを検索して返すため、それらはすべて同じ URL に存在します (おそらくこれは私のエラーであり、それらを分割する必要がありますか?)。したがって、私のコントローラーには次のものがあります。
if ($this->RequestHandler->ext == 'rss') {
RSS フィードでピックアップします。私も使ってみisRss()
ましたが、それが私の問題の原因であると考えて変更しました。私の問題はこれです:
ブラウザからこの URL ( と呼びましょう/blog
) にアクセスすると、通常は HTML 応答が返されます。ヒットすると/blog.rss
、RSS レスポンスが返ってきます。これまでのところ素晴らしい。しかし、リテラル .rss 拡張子がないという事実に関係なく、RSS を返すため/blog
、ヘッダーを設定してアドレスをヒットすると。Accepts: application/rss+xml;
これらのページはキャッシュされているため、ブラウザー ユーザーが/blog
アドレスを要求すると、HTML バージョンではなく、キャッシュされたバージョンの RSS フィードが表示されるようになりました。
ext
RequestHandler にチェックインしたところ、「実際の」拡張機能が存在しない場合でも、Accepts ヘッダーに基づいて値を設定するために _setExtension() が使用されていることがわかりました。これにはオーバーライドがないように見えるので、URL を自分で解析して本当に拡張子があるかどうかを確認するか、これらの URL を完全に分離して、/blog
アドレス空間から rss/json を許可しないようにする必要があるようです (例: 、/blog/feed
、/blog/json
)。
これを回避するためのより良い/より簡単な方法、またはこれが設定されている方法で欠けているものはありますか? 私はext
、実際の拡張機能があることの信頼できる兆候であると考えていましたが、それを探す別の方法があるのでしょうか?