BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。(木)【KtaiLibrary】0.1.0RC1に移行しましたバージョンを0.1.0RC1とし、問題がなければリリースしたいと考えています。DoCoMoをお持ちの方にセッション関連のテストをしていただけると嬉しいです。今回は、今更になってしまうのですがiMODEシミュレータ(II)を導入しまして、こちらでも軽いiMODEチェックが出来るようになりましたので、セッション周りは一通り試しました。beta版は全然ダメでしたが、修正が入ってとりあえず正しく動くようになったかと思います。namedパラメータ付きのテストが入っていなかったので、追加しました。肝心のリダイレクト実装に関してですが...一晩悩み、結局はapp_controller.phpを添付する方向で実装することにしました。リダイレクトはauthだけでなくscaffoldやsecurityでも使っていますので、外部でどうこうするのはやはり無理があるという結論です。新しく制作する場合はapp_controller.phpをまずコピーしてもらい、制作中のサイトで既にapp_controllerがある場合はredirect関数の部分をペーストしていただくことになります。一桁(?)の時はライブラリの丸ごとコピーで動作したのでとても簡単でしたが、今回からは、このapp_controller.phpの件と、それからroutes.phpのnamedセパレータの修正が必要になりますので、是非注意していただきたいと思います。app_controllerといえば、ちょっとはまってしまったのでご紹介。app_controllerを設置する場合は、tmp/cache/persistent内をフラッシュしないと、更新されないので注意。いうと、App::import(というかtreeかも)でパスをキャッシュしているんですよね。フラッシュしないとcake/libs/controllers/app_controller.phpを読み続けます。これはapp_controllerの他に、app_modelとか、デフォルトがあるものは全部が対象になるかと思います。(木)【CakePHP】namedパラメータのセパレータについて皆さんにお聞きしたいことはい、恥ずかしい文章でCakePHPのバグチケットを投げたのは私です(^^:::::::。現在形と過去形が入り乱れ、しかも後で読み返したら凄い文章になっていました。ダメダメですね(;^;)。Libraryでの実装方法について大変に悩んでいます。実は、先日生け贄になっていただいた方にもご相談し、Router::named[‘separator’]を別の文字にすることで回避しようと決めたのですが、それが実は半分しかうまくいっていないことに気がつき、また迷宮入りしているところです。実装に関する今までの経緯を簡単に説明すると、session.use_trans_sidを有効とするところまではうまくいったのですが、テストで制作するサイトに載せるとセッションキーを更新しないため、あれこれやっていました。iMODE端末を持っていないため、とりあえずブラウザのセキュリティをいじり、クッキーを用いない設定でアクセスすると、セッションは一向に保存されません。このとき、制作しているサイトの関係でnamedパラメータ付きのURLで試していたのですが、このパラメータを取ってみたところ問題なく動作し、さらにnamedパラメータのセパレータを「:」から「~」に変更したところ、正しい動きをするようになりました。確認したところ、「:」は予約されたキャラクターと書かれていたため、これが原因ではないかと確信した次第です。router.phpを眺めてみたところ、urlを作成している部分はstartup処理内で行っているようなので、それより前の処理として、componentのinitializeで設定すれば間に合うんじゃないかと思い、ktai.php内で書いてみたところ、URLが正しく処理され、想定していたsid付きのURLとなりました。確かにURLは作られ、一見動作しているように感じたのですが、そのURLが次のレスポンスでnamedパラメータとしてパースされないことが分かりました。いうと、argsを取り出しているのがdispatcher内部で、initializeより前にnamedを取り出す処理が完了してしまっていたからです。模索をしてみたのですが、タイミング的にrouter.php内のソースを変更する以外に方法は見あたらず、ライブラリとしてこの値をどうにかする方法が採れないことが分かったのです。ここで問題になるのは2つの事柄です。一つは「namedセパレータを変えることがそもそも受け入れられるのか?」ということです。以前のバージョンからずっとこのルールの筈ですから、もう世界中に浸透してしまっているURLです。Libraryでは変えてください」というルールがまかり通るか、ということなのです。一つは「router.phpを直接変更する作業が必要」ということで、ライブラリ化できない部分(つまりインストールするだけでは済まなくなった)点についてどう思われるか、ということです。私的には、この繁雑な作業はバグを生み出す元となる可能性があるため、出来れば避けたいのです。いう話になるのですが、それも大変に困難です。paginateで必ずHtmlHelper::link()を使っていて、ここに及ばせる方法がないのです。この問題さえなければ、Ktai::link()を必ず使ってもらう方向で進められるのですが、paginateに対応できないとなると、魅力が薄れてしまいます。完全対応するためにはHtmlHelperもしくはPaginateにパッチを当てたものをcakeディレクトリにコピーしてもらうことになりかねないため、Cakeのバージョンが上がった場合に不具合を生みかねないという問題もあります。一応、もう1つの逃げ道は考えられ、app/config/dispatcher.phpで設定してしまう、という方法もアルにはあります。この段階でRouterはロードされていないため、importする必要が出てきます。Dispatcher内でRouteは二重に読み込まれることになり、ただでさえ悪名高いimportを重複して使いたくないという思いもあります。今のところライブラリ化出来る唯一の方法かもしれません。早い話、CakePHPの方でセパレータ文字を別の文字にしてくれれば、何も考えずにsession.use_trans_sidを有効にするだけでセッション問題は解決できるため、これが一番スマートなので、とりあえずチケットを投げたのですが、たぶん無理でしょう。今まで制作したサイトで不具合が出るでしょうから。「RFCの予約文字」と言う点だけが唯一の頼みの綱なのですが...というわけで、皆さんはどうやったら一番良い方法で解決できると思われるか、是非ご意見を聞きたいです。