[FuelPHP] public ディレクトリ以外から画像を取得する方法

Asset クラスを使わない方法

#前提

一般的に FuelPHP で画像ファイルなどを取得する時

Asset::img('logo.png')

上記のようなコードで imgタグ を取得する。

この Asset クラス、デフォルトのディレクトリだけではなく、

Asset::add_path('resources/templates/dark/')

上記のように任意のパスを追加してやることもできる。


便利な Asset クラスだが、

/var/www/html/hoge/fuel/ ~
/var/www/html/hoge/public/ ~

上記のような構成の場合、下記のディレクトリ以下のファイルを操作する事はできない。(DOCROOT を基準としているため)

/var/www/html/hoge/hoge_images/ ~

こういうニッチな事案の対応策について書く。

#方法

単純に URI を imgタグに突っ込むのもアリだが、別サーバならともかく同サーバではそういう指定はやりたくない。
また、相対パスなどはルーティングの関係上、うまくいかないと思う。

#Uri::create() を使う

Uri::create() はこのような感じでコントローラの URI を取得したい時などに使うことが多い。

echo Uri::create('controller/method');
// http://localhost/controller/method が返ります

この要領で URI を取得する。


例えば

/var/www/html/hoge/hoge_images/test.png

上記のファイルを取得したい場合は以下のように書くと URI が取得できるので、

Uri::create('hoge_images/test.png')

これを以下のように imgタグに突っ込んでやれば良い。

<img src="<?= Uri::create('hoge_images/test.png') ?>">

任意のファイルパスを渡すと、imgタグを返すような関数を作ってやれば、Asset クラスのように便利だと思う。

#おわり

きっと、他に上手い方法があるのだと思うけど、手っ取り早いこの方法を関数化してやってる。
他に上手い方法があれば追記したいと思う。