名前

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タイプを検索するためにMojolicioustypesを使用します。

default_handler

my $default = $renderer->default_handler;
$renderer   = $renderer->default_handler('epl');

自動検知が機能しない場合に描画のために利用する デフォルトのテンプレートのハンドラ。 これはinlineテンプレートのためです。

encoding

my $encoding = $renderer->encoding;
$renderer    = $renderer->encoding('koi8-r');

もし設定されていれば、コンテンツはエンコードされます。 デフォルトはUTF-8Mojolicious::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::RendererMojo::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::Controllerrenderを見てください。

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'
});

templateformatを持ったオプションのハッシュリファレンスに基づいてハンドラを検知します。 ハンドラが見つからなければ、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日更新)

関連情報