September 28, 2012

FuelPHPのAssetクラスとassetsディレクトリ構造

FuelPHPのAssetクラスは主にpublic/assetsディレクトリ内にある
* jsディレクトリ
* cssディレクトリ
* imgディレクトリ
内のjsファイル、cssファイル、画像ファイルに対するHTMLタグを生成するのに使います。

メソッドはそれぞれ
* Asset::js()
* Asset::css()
* Asset::img()
となります。

ただ、例えばjqueryのプラグインを導入した時等、
その中に入っているjs、css、画像ファイルを前述のjs、css、imgディレクトリに
分けて入れてしまっては、メンテナンス性が悪くなる恐れがあります。

個人的には、以下のような感じで、そのまままとめて放り込みたいです。

--
public/
 assets/
  js/
  css/
  img/
  jquery/
   plugin1/
    plugin1.js
    plugin1.css
    plugin1.png
   plugin2/
    plugin2.js
    plugin2.css
    plugin2.png
--

そこで、ドキュメントを参考に
Asset::add_path('assets/jquery/', array('css', 'js', 'img'));
して
Asset::js('plugin1/plugin1.js');
してみたのですが、エラーとなってしまいました。
http://docs.fuelphp.com/classes/asset/usage.html#/method_add_path
http://press.nekoget.com/fuelphp_doc/classes/asset/usage.html#/method_add_path

諦めようかなと思ったのですが、試しに
Asset::add_path('assets/jquery/', 'css');
Asset::add_path('assets/jquery/', 'js');
Asset::add_path('assets/jquery/', 'img');
として
Asset::js('plugin1/plugin1.js');
してみると、うまくいきました。
Asset::css('plugin1/plugin1.css');
もOKでした。
imgメソッドは確認していませんが、たぶんOKでしょう。

Asset::add_path処理を共通化したい場合、各Controllerの親Controllerのbefore()で問題無いですが、
controller_startedイベントで行なっていも良いのかなと思います。
http://docs.fuelphp.com/classes/event.html
http://press.nekoget.com/fuelphp_doc/classes/event.html


--

追記
controller_startedイベントだとRestコントローラの時も通ってしまう??
そのうち確認しておこう。。。

追記2
上記、Restコントローラでも通りました。
イベントクラスの使い所難しいなー。。。

No comments:

Post a Comment