FuelPHP:Windows環境でAssetを使うとパスの区切り文字が2重になる
2012年09月06日 19時29分
新規に社内用Webアプリを実装する機会を得たのでここぞとばかりにfuelPHPを使用してみた。
いやはやこれは楽しい。
本で予習しておいたおかげかfuelPHPの親戚的なCodeIgniterとやらを全く触ったことが無くても直感的に扱えている。
基本さえ押さえれば後はこのフレームワークは困ったら大概configの設定で何とかなる。
それでも解決せずに悩んだらグーグル先生に聞くと大体の答えは用意されている。
また驚くべきことに最近のフレームワークなはずなのに日本語情報が多い。既に日本語の解説本まで出版されている。
ここからも人気の高さが伺える。
前置き的な話は置いといてWindows環境でAssetを使用してみると以下のようなタグが生成されてはまった。(V1.2.1)
1 2 3 4 |
href="/localhost/assets//css//html5reset.css?1342783328" href="/localhost/assets//css//style_base.css?1342787799" href="/localhost/assets//css//style_common.css?1346900805" src="/localhost/fshare/htdocs/public/assets//js//jquery.min.js?1342783375" |
上みたいな感じでassets以降の区切り文字「/」が2重に出力されてしまっている。
こうなってしまうとcssやjsの読み込み自体は問題ないがcss内で指定している画像の相対パスがズレてしまう。
coreを覗いてみるとCOREPATH/classes/asset/instance.php 内のadd_path関数内で
rtrim($folder, DS).DS 文字列の最後についてる区切り文字を削って一つにする処理が記述されているがWindowsだとこれが「¥」でlinuxだと「/」。
ここに流れてくる変数($folder)の値は「”css/”」等となっておりOSのDSと異なっていることが原因ぽい。
これはconfigで設定できるのでCOREPATH/config/asset.phpをAPPPATH/config/にコピーして以下の行を変更する。
1 2 3 4 5 6 7 8 9 |
- 'paths' => array('assets/'), + 'paths' => array('assets'.DS), ~ - 'img_dir' => 'img/', - 'js_dir' => 'js/', - 'css_dir' => 'css/', + 'img_dir' => 'img'.DS, + 'js_dir' => 'js'.DS, + 'css_dir' => 'css'.DS, |
どうやらgithubでの最新版だとこんな設定変更しなくてもcoreクラスの修正がされていてこの症状は発症しない。
公式からv1.2.1のzipファイルをダウンロードしてきて上記症状で困ってる人がいたらこのお気軽手法で回避してみては如何か。