名前

Mojolicious::Routes::Route - ルーティング

使い方

use Mojolicious::Routes::Route;
my $r = Mojolicious::Routes::Route->new;

説明

Mojolicious::Routes::RouteMojolicious::Routesで利用されるルートのコンテナです。

属性

Mojolicious::Routesは次の属性を実装しています。

children

my $children = $r->children;
$r           = $r->children([Mojolicious::Routes->new]);

このルートの子供たち。 ネストするルートで利用されます。

inline

my $bool = $r->inline;
$r       = $r->inline($bool);

ルートのためにbridgeの動作を許可する。

parent

my $parent = $r->parent;
$r         = $r->parent(Mojolicious::Routes->new);

このルートの親。 ネストするルートで利用されます。通常はMojolicious::Routes::Routeオブジェクト。

partial

my $bool = $r->partial;
$r       = $r->partial($bool);

ルートは特定の終端を持っていない。pathにおいて、 残されている文字列がキャプチャされるでしょう。

pattern

my $pattern = $r->pattern;
$r          = $r->pattern(Mojolicious::Routes::Pattern->new);

このルートのパターン。 デフォルトはマッチに利用されるMojolicious::Routes::Patternオブジェクト。

メソッド

Mojolicious::RoutesMojo::Baseのすべてのメソッドを 継承しており、次のメソッドを実装しています。

new

my $r = Mojolicious::Routes->new;
my $r = Mojolicious::Routes::Route->new('/:action');
my $r = Mojolicious::Routes::Route->new('/:action', action => qr/\w+/);
my $r = Mojolicious::Routes::Route->new(format => 0);

新しいルートオブジェクトを構築します。

add_child

$r = $r->add_child(Mojolicious::Route->new);

新しい子供をこのルートに追加します。

# ルートのリタッチ
$r->add_child($r->find('foo'));

any

my $route = $r->any('/:foo');
my $route = $r->any('/:foo' => sub {...});
my $route = $r->any('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->any('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->any([qw(GET POST)] => '/:foo' => sub {...});
my $route = $r->any([qw(GET POST)] => '/:foo' => [foo => qr/\w+/]);

Generate Mojolicious::Routes::Route object matching any of the listed HTTP request methods or all.

リストされたHTTPメソッドのどれかか、指定されない場合はすべてのHTTPメソッドマッチするMojolicious::Routes::Routeオブジェクトを生成します。

# パターンと行先でルーティング
$r->any('/user')->to('user#whatever');

All arguments are optional, but some have to appear in a certain order, like the two supported array reference values, which contain the HTTP methods to match and restrictive placeholders.

すべての引数はオプションですが、 二つのサポートされている配列リファレンスの値のように、 特定の順序で使わなければならないものもあります。 マッチのためのHTTPメソッドと制約プレースホルダーを含むものです。

# HTTPメソッドとパターン、制約的なプレースホルダーと行き先でルーティング
$r->any(['DELETE', 'PUT'] => '/:foo' => [foo => qr/\w+/])->to('foo#bar');

二つのサポートされている文字列についても、同じです。 ルーティングパターンとルーティング名を含むものです。 デフォルトは、ぽたーん/とパターンに基づく名前です。

# パターンと名前と行き先でルーティング
$r->any('/:foo' => 'foo_route')->to('foo#bar');

An arbitrary number of key/value pairs in between the route pattern and name can be used to specify route conditions.

ルートパターンと名前の間にある任意の数のキーと値のペアは ルーティング条件を指定するために使用されます。

# パターンと条件と行き先でルーティング
$r->any('/' => (agent => qr/Firefox/))->to('foo#bar');

A hash reference is used to specify optional placeholders and default values for the stash.

ハッシュリファレンスは、オプションナルプレースホルダとスタッシュのデフォルト値の指定に使用されます。

# パターンとオプショナルプレースホルダーと行き先でルーティング
$r->any('/:foo' => {foo => 'bar'})->to('foo#bar');

コードリファレンスは、cbの値を指定し、デフォルト値をスタッシュにマージするために利用されます。

# パターンと行き先をクロージャーで指定してルーティングする。
$r->any('/:foo' => sub {
  my $c = shift;
  $c->render(text => 'Hello World!');
});

あらゆる与えられたHTTPリクエスト、あるいはすべてのHTTPリクエストの メソッドにマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial のチュートリアルも見てください。

delete

my $route = $r->delete;
my $route = $r->delete('/:foo');
my $route = $r->delete('/:foo' => sub {...});
my $route = $r->delete('/:foo' => sub {...} => 'name');
my $route = $r->delete('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->delete('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->delete('/:foo' => (agent => qr/Firefox/) => sub {...});

DELETEリクエストにだけマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial のチュートリアルも見てください。

# 行き先でルーティング
$r->delete('/user')->to('user#remove');

detour

$r = $r->detour(action => 'foo');
$r = $r->detour('controller#action');
$r = $r->detour(Mojolicious->new, foo => 'bar');
$r = $r->detour('MyApp', {foo => 'bar'});

このルートのためにデフォルトのパラメーターを設定し、 アプリケーションの埋め込み簡単にするための、 部分的なマッチングを許可します。 toと同じ引数をとります。

find

my $route = $r->find('foo');

名前で子ルートを探します。 カスタム名は自動的に生成されたルート名より優先します。

# 名前付きルートのデフォルトパラメータを変更する
$r->find('show_user')->to(foo => 'bar');

get

my $route = $r->get;
my $route = $r->get('/:foo');
my $route = $r->get('/:foo' => sub {...});
my $route = $r->get('/:foo' => sub {...} => 'name');
my $route = $r->get('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->get('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->get('/:foo' => (agent => qr/Firefox/) => sub {...});

リクエストだけにマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

# 行き先でルーティング
$r->get('/user')->to('user#show');

has_custom_name

my $bool = $r->has_custom_name;

ルートがユーザーが定義したカスタム名を持っていれば、 真を返却します。

has_websocket

my $bool = $r->has_websocket;

このルートがWebSocketの祖先を持っている場合は真を返却し、将来のために結果をキャッシュします。

is_endpoint

my $bool = $r->is_endpoint;

このルートが終点として評価されれば真を返却します。

is_websocket

my $bool = $r->is_websocket;

ルートがWebSocketならば真を返却します。

name

my $name = $r->name;
$r       = $r->name('foo');

このルートの名前。デフォルトはルートのパターンに基づいて自動的に生成された名前です。 currentという名前は現在のルートを参照するために予約されているということに 注意してください。

$r->get('/user')->to('user#show')->name('show_user');

options

my $route = $r->options;
my $route = $r->options('/:foo');
my $route = $r->options('/:foo' => sub {...});
my $route = $r->options('/:foo' => sub {...} => 'name');
my $route = $r->options('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->options('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->options('/:foo' => (agent => qr/Firefox/) => sub {...});

OPTIONSリクエストにだけマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

$r->options('/user')->to('user#overview');

over

my $over = $r->over;
$r       = $r->over(foo => 1);
$r       = $r->over(foo => 1, bar => {baz => 'yada'});
$r       = $r->over([foo => 1, bar => {baz => 'yada'}]);

条件のパラメータをこのルートに適用します。

$r->get('/foo')->over(host => qr/mojolicio\.us/)->to('foo#bar');

parse

$r = $r->parse('/:action');
$r = $r->parse('/:action', action => qr/\w+/);
$r = $r->parse(format => 0);

パターンを解析します。

patch

my $route = $r->patch;
my $route = $r->patch('/:foo');
my $route = $r->patch('/:foo' => sub {...});
my $route = $r->patch('/:foo' => sub {...} => 'name');
my $route = $r->patch('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->patch('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->patch('/:foo' => (agent => qr/Firefox/) => sub {...});

PATCHリクエストのみにマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

# 行き先をルーティング
$r->patch('/user')->to('user#update');

post

my $route = $r->post;
my $route = $r->post('/:foo');
my $route = $r->post('/:foo' => sub {...});
my $route = $r->post('/:foo' => sub {...} => 'name');
my $route = $r->post('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->post('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->post('/:foo' => (agent => qr/Firefox/) => sub {...});

POSTリクエストのみにマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

$r->post('/user')->to('user#create');

put

my $route = $r->put;
my $route = $r->put('/:foo');
my $route = $r->put('/:foo' => sub {...});
my $route = $r->put('/:foo' => sub {...} => 'name');
my $route = $r->put('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->put('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->put('/:foo' => (agent => qr/Firefox/) => sub {...});

PUTリクエストのみにマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

$r->put('/user')->to('user#replace');

remove

$r = $r->remove;

親からルートを取り除きます。

# 完全にルートを取り除く
$r->find('foo')->remove;

# 新しい親にルートをリタッチ
$r->route('/foo')->add_child($r->find('bar')->remove);

render

my $path = $r->render({foo => 'bar'});

パラメータつきのルートをパスに描画します。

root

my $root = $r->root;

このルートの先祖であるMojolicious::Routesオブジェクト。

route

my $route = $r->route;
my $route = $r->route('/:action');
my $route = $r->route('/:action', action => qr/\w+/);
my $route = $r->route(format => 0);

すべてのHTTPリクエストメソッドにマッチするルートを生成します。

suggested_method

my $method = $r->suggested_method;

このルートに到達するためのHTTPメソッドを推測します。 GETPOSTが好まれます。

to

my $defaults = $r->to;
$r           = $r->to(action => 'foo');
$r           = $r->to({action => 'foo'});
$r           = $r->to('controller#action');
$r           = $r->to('controller#action', foo => 'bar');
$r           = $r->to('controller#action', {foo => 'bar'});
$r           = $r->to(Mojolicious->new);
$r           = $r->to(Mojolicious->new, foo => 'bar');
$r           = $r->to(Mojolicious->new, {foo => 'bar'});
$r           = $r->to('MyApp');
$r           = $r->to('MyApp', foo => 'bar');
$r           = $r->to('MyApp', {foo => 'bar'});

このルートのためにデフォルトのパラメーターを設定します。

to_string

my $string = $r->to_string;

ルート全体を文字列化します。

under

my $route = $r->under(sub {...});
my $route = $r->under('/:foo' => sub {...});
my $route = $r->under('/:foo' => {foo => 'bar'});
my $route = $r->under('/:foo' => [foo => qr/\w+/]);
my $route = $r->under([format => 0]);

ブリッジを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

# 長いバージョン
$r->any('/:foo' => sub {...})->inline(1);

# 2つのルート間で共有される中間の宛先とプレフィックス
my $auth = $r->under('/user')->to('user#auth');
$auth->get('/show')->to('#show');
$auth->post('/create')->to('#create');

via

my $methods = $r->via;
$r          = $r->via('GET');
$r          = $r->via(qw(GET POST));
$r          = $r->via([qw(GET POST)]);

このルートが処理するのを許可する制限されたHTTPメソッド。 デフォルトでは何の制限もありません。

$r->route('/foo')->via('GET', 'POST')->to('foo#bar');

websocket

my $route = $r->websocket;
my $route = $r->websocket('/:foo');
my $route = $r->websocket('/:foo' => sub {...});
my $route = $r->websocket('/:foo' => sub {...} => 'name');
my $route = $r->websocket('/:foo' => {foo => 'bar'} => sub {...});
my $route = $r->websocket('/:foo' => [foo => qr/\w+/] => sub {...});
my $route = $r->websocket('/:foo' => (agent => qr/Firefox/) => sub {...});

WebSocketハンドシェイクにだけマッチするルートを生成します。 引数のバリエーションについてはMojolicious::Guides::Tutorial も見てください。

ショートカット

上記の属性やメソッドに加えて、Mojolicious::Routesのインスタンスからショートカットを呼ぶこともできます。

# "firefox"ショートカットを追加
$r->add_shortcut(firefox => sub {
  my ($r, $path) = @_;
  $r->get($path, agent => qr/Firefox/);
});

# ルートを生成するために"firefox"ショートカットを使用する
$r->firefox('/welcome')->to('firefox#welcome');
$r->firefox('/bye')->to('firefox#bye');

参照

Mojolicious, Mojolicious::Guides, http://mojolicio.us.

(Mojolicious 8.12を反映。2019年6月13日更新)

関連情報