memocon プログラミングのメモや物欲日記、雑記等

FuelPHP:Windows環境でAssetを使うとパスの区切り文字が2重になる

2012年09月06日 19時29分

新規に社内用Webアプリを実装する機会を得たのでここぞとばかりにfuelPHPを使用してみた。
いやはやこれは楽しい。

本で予習しておいたおかげかfuelPHPの親戚的なCodeIgniterとやらを全く触ったことが無くても直感的に扱えている。

基本さえ押さえれば後はこのフレームワークは困ったら大概configの設定で何とかなる。
それでも解決せずに悩んだらグーグル先生に聞くと大体の答えは用意されている。

また驚くべきことに最近のフレームワークなはずなのに日本語情報が多い。既に日本語の解説本まで出版されている。
ここからも人気の高さが伺える。

前置き的な話は置いといてWindows環境でAssetを使用してみると以下のようなタグが生成されてはまった。(V1.2.1)

上みたいな感じで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/にコピーして以下の行を変更する。

どうやらgithubでの最新版だとこんな設定変更しなくてもcoreクラスの修正がされていてこの症状は発症しない。
公式からv1.2.1のzipファイルをダウンロードしてきて上記症状で困ってる人がいたらこのお気軽手法で回避してみては如何か。

FuelPHP:Rest_Controllerの拡張子を省略した時のフォーマットを変更する

2012年07月12日 02時00分

FuelPHPには強力なWebAPI開発用(?)のコントローラーが備わっていると本や勉強会で知りそれならば使わない手はないと最初に手を出してみたのがRest_Controller。
これはWebAPIなどでjsonやxml、csv等を返すサービスを作る場合にとても便利な機能が満載なのだ。

documentや参考書籍を片目にどうにか希望通りの形までもっていけた。

しかしそこで気になったのがURLの拡張子を省略した時に返却されるフォーマットがxmlだったこと。

拡張子を省略した時の形式をjsonにしたかったので調べてみたらfuel/core/config/rest.phpにdefault_formatなるまんまなものがあったのでfuel/app/config/rest.phpにコピーして値をxmlからjsonに変更してみた。

fuel/app/config/rest.php

しかしこれだけでは不十分で同じrest.phpファイル内にあるignore_http_acceptがデフォルトのfalseの場合、
HTTPヘッダ情報のHTTP_ACCEPTに含まれるmimeタイプがRest_Controllerの$_supported_formatsの中に存在するとdefault_formatより優先されてしまう。
$_supported_formatsをjsonのみにした場合は問題ないがxmlもサポートして拡張子を省略した場合はjson形式に固定して返却したければこの値をtrueにする。

fuel/app/config/rest.php