メイン CakePHP ビュー(View)
Viewキャッシュでの日本語アクション名の対処 | 投稿するにはまず登録を |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
| 投稿者 | スレッド |
|---|---|
| showBOO | 投稿日時: 2009-2-14 23:40 |
Baker スタート ![]() ![]() 登録日: 2008-12-26 居住地: 広島 投稿: 14 |
Viewキャッシュでの日本語アクション名の対処 showBOOと申します。
質問をよろしいでしょうか。 viewでファイルキャッシュをやろうと思い、以下のようなコードを組みました。 このとき、リクエストURLとして、 http://hogehoge/searches/index/%E3%82%AF%E3%83%9E/2 という風にURLエンコードされた日本語を含むパラメータが渡されると、 キャッシュ動作がうまくいきません。 なにか対応策はありますでしょうか? |
| MASA-P | 投稿日時: 2009-2-15 0:21 |
Cake 職人 ![]() ![]() 登録日: 2008-1-24 居住地: 投稿: 224 |
Re: Viewキャッシュでの日本語アクション名の対処 app/config/core.php内の「Configure::Cache.check」をtrueにしてありますでしょうか?
キャッシュに関する設定をマニュアルで再度確認してみてください。 ▼7.2.3 キャッシュヘルパーの設定 http://book.cakephp.org/ja/view/345/キャッシュヘルパーの設定 |
| showBOO | 投稿日時: 2009-2-15 1:26 |
Baker スタート ![]() ![]() 登録日: 2008-12-26 居住地: 広島 投稿: 14 |
Re: Viewキャッシュでの日本語アクション名の対処 はい。
「Configure::Cache.check」はtrueにしてあります。 他の、日本語ではないアルファベットや数字のURLに対しては正常にキャッシュ動作をしています。 |
| MASA-P | 投稿日時: 2009-2-15 2:18 |
Cake 職人 ![]() ![]() 登録日: 2008-1-24 居住地: 投稿: 224 |
Re: Viewキャッシュでの日本語アクション名の対処 こちらで試してみましたが、日本語パスでも問題なく動きますね。
気になるのは、$nameにコントローラ名と違う名前が入っていることです。これが原因のような気がします。 キャッシュがある場合はコントローラ名で探しますが、ない場合は$nameの名前のビューを探しに行くようですので、キャッシュが期限切れになるとエラーが出ると思います。 試しに、tmp内のビューキャッシュを消してから、いきなり日本語URLで確認してみてはいかがでしょう? |
| showBOO | 投稿日時: 2009-2-15 9:52 |
Baker スタート ![]() ![]() 登録日: 2008-12-26 居住地: 広島 投稿: 14 |
Re: Viewキャッシュでの日本語アクション名の対処 >気になるのは、$nameにコントローラ名と違う名前が入っていることです。これが原因のような気がします。
申し訳ありません。記述間違えでした。 正しくは、 です。 ローカルのWindowsのXAMPPで動かしているときは正しく動いたのですが、本番環境のLinuxに移動したら動作しなくなりました。 試しに、日本語をいきなりパラメータとして渡したのですが、 tmp/cache/viewsの中には、キャッシュファイルとして、 searches.php となってしまい、 searches_日本語.php とはなりません |
| MASA-P | 投稿日時: 2009-2-15 13:16 |
Cake 職人 ![]() ![]() 登録日: 2008-1-24 居住地: 投稿: 224 |
Re: Viewキャッシュでの日本語アクション名の対処 引用:
すみません。 自分の方で実行結果を勘違いしていました。 確かに日本語URLですとパスがすっぽり抜けますね! 原因を調べてみましたが、どうやら、パスを加工してファイル名にする段階で使用しているInflector::slug()がマルチバイトに対応していないのが原因のようです。 いろいろ修正を試みてみたんですが、preg_replace()を使っている限り難しいかも… というわけでチケットを出しておきました(人生初チケットです!)。 ▼Inflector::slug() converts path to string without multibyte words. https://trac.cakephp.org/ticket/6104 |
| dky24 | 投稿日時: 2009-2-15 14:07 |
Baker スタート ![]() ![]() 登録日: 2008-12-17 居住地: 投稿: 4 |
Re: Viewキャッシュでの日本語アクション名の対処 初めまして。
自分も以前に同じ問題で悩んだことがあったんですが、 そのときは、何らかのユニークなキーとなる英数字を作って、URLにくっつけてやることで済ませました。 日本語部分がInflector::slug で切られてもユニークな英数字が残っていればキャッシュのファイル名が変わるからです。 ただ、既存のモデルから記事を読み出す・・・とかの場合は、記事のIDなどをキーにできますけど、showBOOさんのURLから察すると、検索用のキャッシュなのでしょうか? その場合、ユーザーが入力した検索文字からキーを作るのに何かワンクッション必要かもしれないですね。 Inflectorを改造してマルチバイトを通すように・・・とも考えたのですが、 ファイル名に日本語を通しちゃうと、OSやファイルシステムが変わったらうまく動かない場合があるかもしれないと思い止めました。エンコードしてあれば大丈夫なのかもしれませんが。 |
| showBOO | 投稿日時: 2009-2-15 18:14 |
Baker スタート ![]() ![]() 登録日: 2008-12-26 居住地: 広島 投稿: 14 |
Re: Viewキャッシュでの日本語アクション名の対処 >MASA-Pさん
>原因を調べてみましたが、どうやら、パスを加工してファイル名にする段階で使用しているInflector::slug()がマルチバイトに対応していないのが原因のようです。 なるほど。 Cakeへの報告ありがとうございます。 >dky24さん >ただ、既存のモデルから記事を読み出す・・・とかの場合は、記事のIDなどをキーにできますけど、showBOOさんのURLから察すると、検索用のキャッシュなのでしょうか? そうです。 検索用の文字列です。 クエリーキャッシュとかを使えば良さそうですが、DBは使っておらず、WEB-APIのみのシステムなので・・・使えません。 バグフィクスを待った方がよいでしょうか。 |
| MASA-P | 投稿日時: 2009-2-19 1:38 |
Cake 職人 ![]() ![]() 登録日: 2008-1-24 居住地: 投稿: 224 |
Re: Viewキャッシュでの日本語アクション名の対処 「Enhancement Tickets」に変更されてしまったので、たぶん直るのにとても時間がかかるか、重要でないと判断された場合はクローズされてしまう可能性が高いです。
たぶんいつまで経っても実装できなくなってしまうと思いますので、dky24さんのおっしゃるような、別の方法を考えられた方が良いかもしれませんね。 ちなみにinflector.phpは、日本語圏のエディタだとコードを修正保存した場合、中の文字を壊してしまってPHPエラーが出やすいので、修正はかなり難しいです。 |
| showBOO | 投稿日時: 2009-2-20 0:31 |
Baker スタート ![]() ![]() 登録日: 2008-12-26 居住地: 広島 投稿: 14 |
Re: Viewキャッシュでの日本語アクション名の対処 そうですか。
なにか別なアプローチを考えてみます。 お手数をおかけしました。 ありがとうございました。 |
| (1) 2 » | |
| スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
| 投稿するにはまず登録を | |



