Mojolicious::Renderer - MIMEタイプに基づくレンダラ
使い方
my $renderer = Mojolicious::Renderer->new; push @{$renderer->classes}, 'MyApp::Controller::Foo'; push @{$renderer->paths}, '/home/sri/templates';
説明
Mojolicious::Rendererは標準のMojoliciousのレンダラです。 蓄積されたデータ構造はコンテンツに変換されます。 より多くのことを知るにはMojolicious::Guides::Renderingを見てください。
属性
Mojolicious::Rendererは次の属性を実装しています。
cache
my $cache = $renderer->cache; $renderer = $renderer->cache(Mojo::Cache->new);
レンダラのキャッシュ。デフォルトはMojo::Cacheオブジェクトです。
classes
my $classes = $renderer->classes; $renderer = $renderer->classes(['main']);
Mojo::Loaderを使って、 DATA
セクションに記述されたテンプレートを探すためのクラス。 先頭にあるクラスから順に探します。デフォルトは main
です。
# DATAセクションのテンプレートのために他のクラスを追加 push @{$renderer->classes}, 'Mojolicious::Plugin::Fun';
compress
my $bool = $renderer->compress; $renderer = $renderer->compress($bool);
動的に生成されたレスポンスコンテンツの圧縮を交渉し、自動的にgzip
圧縮しようとします。 デフォルトは、無効です。実験的であり、警告なしに変更される可能性があります。
default_format
my $default = $renderer->default_format; $renderer = $renderer->default_format('html');
format
がスタッシュに設定されていない場合の描画のためのデフォルトのフォーマット。 レンダラはコンテンツのMIMEタイプを検索するためにMojoliciousのtypes
を使用します。
default_handler
my $default = $renderer->default_handler; $renderer = $renderer->default_handler('epl');
自動検知が機能しない場合に描画のために利用する デフォルトのテンプレートのハンドラ。 これはinline
テンプレートのためです。
encoding
my $encoding = $renderer->encoding; $renderer = $renderer->encoding('koi8-r');
もし設定されていれば、コンテンツはエンコードされます。 デフォルトはUTF-8
。 Mojolicious::Plugin::EPRendererのような多くのレンダラーは テンプレートファイルが処理前にどのようにデコードすべきかを 決定するためにこの値を利用します。
handlers
my $handlers = $renderer->handlers; $renderer = $renderer->handlers({epl => sub { ... }});
ハンドラを登録します。
helpers
my $helpers = $renderer->helpers; $renderer = $renderer->helpers({url_for => sub { ... }});
ヘルパーを登録します。
paths
my $paths = $renderer->paths; $renderer = $renderer->paths(['/foo/bar/templates']);
テンプレートを探すディレクトリ。先頭にあるディレクトリから順に探します。
# 別の templates ディレクトリを追加 push @{$renderer->paths}, '/foo/bar/templates'; # 優先順位の高い他の「templates」ディレクトリを追加 unshift @{$renderer->paths}, '/home/sri/themes/blue/templates';
メソッド
Mojolicious::RendererはMojo::Baseのすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
accepts
my $all = $renderer->accepts(Mojolicious::Controller->new); my $best = $renderer->accepts(Mojolicious::Controller->new, 'html', 'json');
Accept
リクエストヘッダー, スタッシュのformat
の値、 GET
/POST
パラメータのformat
の値から Mojolicious::Controllerオブジェクトのための可能な表現を選択します。 デフォルトで、もし優先順位が決定できない場合は、最初の拡張子を返します。 ブラウザはしばしば本当は何を実際に望んでいるかをしらないので、 もしX-Requested-With
ヘッダにXMLHttpRequest
の値がなければ ひとつ以上のMIMEタイプをもつ不確定なAccept
リクエストヘッダは無視されるでしょう。
add_handler
$renderer = $renderer->add_handler(epl => sub { ... });
レンダラに新しいハンドラを追加します。
$renderer->add_handler(foo => sub { my ($renderer, $c, $output, $options) = @_; ... $$output = 'Hello World!'; });
add_helper
$renderer = $renderer->add_helper(url_for => sub { ... });
新しいヘルパーをレンダラに登録します。
$renderer->add_helper(foo => sub { my ($c, @args) = @_; ... });
get_data_template
my $template = $renderer->get_data_template({ template => 'foo/bar', format => 'html', handler => 'epl' });
オプションのtemplate
, format
, variant
and handler
の値を指定したハッシュレファレンスで、"classes"からDATA
テンプレートを取得します。テンプレートが見つからなかった場合は、undef
を返します。 通常はハンドラで利用されます。
new
my $renderer = Mojolicious::Renderer->new;
新しいレンダラを構築します。
get_helper
my $helper = $renderer->get_helper('url_for');
完全な名前でヘルパーを取得し、プレフィックスつきのヘルパーを 動的に生成します。 ヘルパーかプレフィックスが見つからなければundef
を返します。 生成されたヘルパーは現在のコントローラーオブジェクトを含んでいる プロキシオブジェクトを返却し、 ネストされたヘルパーを呼び出すことができます。
render
my ($output, $type) = $renderer->render(Mojolicious::Controller->new, { template => 'foo/bar', foo => 'bar' });
Mojoのレンダラのひとつを通して出力を描画します。 よりユーザーフレンドリーなインターフェースについては Mojolicious::Controllerのrender
を見てください。
respond
my $bool = $renderer->respond(Mojolicious::Controller->new, $output, $format); my $bool = $renderer->respond( Mojolicious::Controller->new, $output, $format, $status);
動的に生成されたレスポンスコンテンツをファイナライズし、可能であれば、圧縮します。 このメソッドは実験的なものであり、変更することなく変更できることに注意してください。
template_for
my $name = $renderer->template_for(Mojolicious::Controller->new);
Mojolicious::Controllerオブジェクトのための デフォルトのテンプレート名を生成します。
template_handler
my $handler = $renderer->template_handler({ template => 'foo/bar', format => 'html' });
template
とformat
を持ったオプションのハッシュリファレンスに基づいてハンドラを検知します。 ハンドラが見つからなければ、undefを返します。
template_name
my $template = $renderer->template_name({ template => 'foo/bar', format => 'html', handler => 'epl' });
template
, format
, handler
を持つオプションのハッシュに基づいて テンプレート名を構築します。 テンプレートが見つからなければ、undefを返します。通常はハンドラによって利用されます。
template_path
my $path = $renderer->template_path({ template => 'foo/bar', format => 'html', handler => 'epl' });
template
, format
, handler
を持つオプションのハッシュに基づいて、 テンプレートのフルパスを構築します。 ファイルがパスの中に見つからなければ、undefを返します。通常はハンドラによって利用されます。
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年6月13日更新)