Mojolicious::Static - 静的ファイルを提供
使い方
use Mojolicious::Static; my $static = Mojolicious::Static->new; push @{$static->classes}, 'MyApp::Controller::Foo'; push @{$static->paths}, '/home/sri/public';
説明
Mojolicious::Static は、 RFC 7232と RFC 7233 に基づく Range
と If-Modified-Since
とIf-None-Match
をサポートした 静的ファイルへのディスパッチャです。
属性
Mojolicious::Static は以下の属性を実装しています。
classes
my $classes = $static->classes; $static = $static->classes(['main']);
Mojo::Loaderを使って、DATA
セクションにある静的ファイルを探すためのクラス。 先頭にあるクラスから順に探します。デフォルトは main
です。 index.html
のようにひとつの拡張子が利用されたファイルだけを探します。
# DATA セクションに静的ファイルが記述された別のクラスを追加 push @{$static->classes}, 'Mojolicious::Plugin::Fun'; # DATAセクションにおいて、優先順位の高い静的ファイルのための他のクラスを追加 unshift @{$static->classes}, 'Mojolicious::Plugin::MoreFun';
extra
my $extra = $static->extra; $static = $static->extra({'foo/bar.txt' => '/home/sri/myapp/bar.txt'});
ビルトインの例外やノットファウンドページで利用される画像のようなものを "paths"以外の場所からサーブするためのエキストラファイルのパス。 エキストラファイルは、他の代替手段が"paths"と"classes"に見つけられない場合だけ、サーブされることに注意してください。
# ビルトインのファビコンを除く delete $static->extra->{'favicon.ico'};
paths
my $paths = $static->paths; $static = $static->paths(['/home/sri/public']);
静的ファイルを提供するディレクトリ。静的ファイルは、先頭にあるディレクトリから順に探します。
# 別の public ディレクトリを追加 push @{$static->paths}, '/home/sri/public'; # 高い優先順位で、別の public ディレクトリを追加 unshift @{$static->paths}, '/home/sri/themes/blue/public';
メソッド
Mojolicious::Static は Mojo::Base から全てのメソッドを 継承しており、以下の新しいメソッドを実装しています。
dispatch
my $bool = $static->dispatch(Mojolicious::Controller->new);
Mojolicious::Controller オブジェクトをディスパッチします。
file
my $asset = $static->file('images/logo.png'); my $asset = $static->file('../lib/MyApp.pm');
ファイルのためのMojo::Asset::FileあるいはMojo::Asset::Memoryオブジェクト。 paths
への相対か、classes
からの相対になります。 見つからなかった場合はundef
を返します。 このメソッドは親ディレクトリへのトラバーサルを保護しないので注意してください。
my $content = $static->file('foo/bar.html')->slurp;
is_fresh
my $bool = $static->is_fresh(Mojolicious::Controller->new, {etag => 'abc'});
If-None-Match
、If-Modified-Since
リクエストヘッダを ETag
、Last-Modified
レスポンスと比較して、 新鮮さをチェックします。
以下のオプションが現在では利用可能です。
- etag
-
etag => 'abc'
比較の前に
ETag
ヘッダーを追加します。 - last_modified
-
last_modified => $epoch
比較の前に
Last-Modified
ヘッダを追加します。
serve
my $bool = $static->serve(Mojolicious::Controller->new, 'images/logo.png'); my $bool = $static->serve(Mojolicious::Controller->new, '../lib/MyApp.pm');
指定したファイルを提供します。paths
かclasses
への相対パスです。 このメソッドは親ディレクトリへのトラバーサルを保護しないので注意してください。
serve_asset
$static->serve_asset(Mojolicious::Controller->new, Mojo::Asset::File->new);
Range
とIf-Modified-Since
をサポートした Mojo::Asset::FileあるいはMojo::Asset::Memoryオブジェクトをサーブします。
warmup
$static->warmup;
将来の利用のために"classes"からの静的ファイルを準備します。
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年6月13日更新)