[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 クラスのように便利だと思う。
おわり
きっと、他に上手い方法があるのだと思うけど、手っ取り早いこの方法を関数化してやってる。
他に上手い方法があれば追記したいと思う。