見つからない場合のユーザー定義のエラーページとサーバーエラーページをユーザー定義ページにリダイレクトする方法Mojoliciouslite
3 に答える
exception.html.ep
liteappという名前の、またはnot_found.html.ep
liteappの最後にカスタムページのテンプレートを追加できます。
例えば:
use Mojolicious::Lite;
get '/' => sub {
my $self = shift;
$self->render(text => "Hello.");
};
app->start;
__DATA__
@@ not_found.html.ep
<!DOCTYPE html>
<html>
<head><title>Page not found</title></head>
<body>Page not found <%= $status %></body>
</html>
参考までに、Mojoliciousレンダリングガイドを参照してください。
レンダラーは、組み込みのデフォルトテンプレートにフォールバックする前に、常にexception。$mode。$format。*またはnot_found。$mode。$format。*を見つけようとします。
404ページでコードを実行したかったので、ここから借用します https://groups.google.com/forum/#!topic/mojolicious/0wzBRnetiHo
すべてをキャッチするルートを作成し、他のすべてのルートの後に配置したため、ルートと一致しないURLは次のようになります。
any '/(*)' => sub {
my $self = shift;
$self->res->code(404);
$self->res->message('Not Found');
# 404
$self->stash( {
# ... my stuff in the stash ...
} );
$self->render('mytemplate', status => 404);
};
他のエラーと同じように404エラーを送り返したいAPIがありました。同じJSON形式などです。
私はこのスニペットを最後に持っていましたstartup
(ライトではなくフルアプリ)。これは最後に定義されたルートであるため、まだ処理されていないもののみを取得します。そして、これはすべてを処理するので、Mojoはテンプレートを探すことによって独自の404処理を使用する機会を得ることはありません。
$self->routes->any('/*')->to(
controller => 'Base',
action => 'not_found'
);