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

2 min read
hiroweb developer

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 クラスのように便利だと思う。

おわり

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