Mojolicious::Plugin::DefaultHelpers - Default helpers plugin
# Mojolicious $self->plugin('DefaultHelpers'); # Mojolicious::Lite plugin 'DefaultHelpers';
Mojolicious::Plugin::DefaultHelpers is a collection of helpers for Mojolicious.
This is a core plugin, that means it is always enabled and its code a good example for learning to build new plugins, you're welcome to fork it.
See "PLUGINS" in Mojolicious::Plugins for a list of plugins that are available by default.
Mojolicious::Plugin::DefaultHelpers implements the following helpers.
my $formats = $c->accepts; my $format = $c->accepts('html', 'json', 'txt');
Select best possible representation for resource from Accept request header, format stash value or format GET/POST parameter with "accepts" in Mojolicious::Renderer, defaults to returning the first extension if no preference could be detected.
Accept
format
GET
POST
# Check if JSON is acceptable $c->render(json => {hello => 'world'}) if $c->accepts('json'); # Check if JSON was specifically requested $c->render(json => {hello => 'world'}) if $c->accepts('', 'json'); # Unsupported representation $c->render(data => '', status => 204) unless my $format = $c->accepts('html', 'json'); # Detected representations to select from my @formats = @{$c->accepts};
%= app->secrets->[0]
Alias for "app" in Mojolicious::Controller.
%= b('test 123')->b64_encode
Turn string into a Mojo::ByteStream object.
%= c(qw(a b c))->shuffle->join
Turn list into a Mojo::Collection object.
%= config 'something'
Alias for "config" in Mojo.
%= content foo => begin test % end %= content bar => 'Hello World!' %= content 'foo' %= content 'bar' %= content
Store partial rendered content in a named buffer and retrieve it later, defaults to retrieving the named buffer content, which is commonly used for the renderers layout and extends features. New content will be ignored if the named buffer is already in use.
content
layout
extends
% content_for foo => begin test % end %= content_for 'foo'
Same as "content", but appends content to named buffers if they are already in use.
% content_for message => begin Hello % end % content_for message => begin world! % end %= content 'message'
% content_with foo => begin test % end %= content_with 'foo'
Same as "content", but replaces content of named buffers if they are already in use.
% content message => begin world! % end % content_with message => begin Hello <%= content 'message' %> % end %= content 'message'
%= csrf_token
Get CSRF token from "session", and generate one if none exists.
% if (current_route 'login') { Welcome to Mojolicious! % } %= current_route
Check or get name of current route.
$c->delay(sub {...}, sub {...});
Disable automatic rendering and use "delay" in Mojo::IOLoop to manage callbacks and control the flow of events, which can help you avoid deep nested closures that often result from continuation-passing style. Also keeps a reference to "tx" in Mojolicious::Controller in case the underlying connection gets closed early, and calls "reply->exception" if an exception gets thrown in one of the steps, breaking the chain.
# Longer version $c->render_later; my $tx = $c->tx; my $delay = Mojo::IOLoop->delay(sub {...}, sub {...}); $delay->catch(sub { $c->reply->exception(pop) and undef $tx })->wait; # Non-blocking request $c->delay( sub { my $delay = shift; $c->ua->get('http://mojolicio.us' => $delay->begin); }, sub { my ($delay, $tx) = @_; $c->render(json => {title => $tx->res->dom->at('title')->text}); } );
%= dumper {some => 'data'}
Dump a Perl data structure with "dumper" in Mojo::Util, very useful for debugging.
% extends 'blue'; % extends 'blue', title => 'Blue!';
Set extends stash value, all additional key/value pairs get merged into the "stash".
%= flash 'foo'
Alias for "flash" in Mojolicious::Controller.
$c->inactivity_timeout(3600);
Use "stream" in Mojo::IOLoop to find the current connection and increase timeout if possible.
# Longer version Mojo::IOLoop->stream($c->tx->connection)->timeout(3600);
%= include 'menubar' %= include 'menubar', format => 'txt'
Alias for "render_to_string" in Mojolicious::Controller.
my $bool = $c->is_fresh; my $bool = $c->is_fresh(etag => 'abc'); my $bool = $c->is_fresh(last_modified => $epoch);
Check freshness of request by comparing the If-None-Match and If-Modified-Since request headers to the ETag and Last-Modified response headers with "is_fresh" in Mojolicious::Static.
If-None-Match
If-Modified-Since
ETag
Last-Modified
# Add ETag/Last-Modified headers and check freshness before rendering $c->is_fresh(etag => 'abc', last_modified => 1424985708) ? $c->rendered(304) : $c->render(text => 'I ♥ Mojolicious!');
% layout 'green'; % layout 'green', title => 'Green!';
Set layout stash value, all additional key/value pairs get merged into the "stash".
%= param 'foo'
Alias for "param" in Mojolicious::Controller.
$c->reply->asset(Mojo::Asset::File->new);
Reply with a Mojo::Asset::File or Mojo::Asset::Memory object using "serve_asset" in Mojolicious::Static, and perform content negotiation with Range, If-Modified-Since and If-None-Match headers.
Range
# Serve asset with custom modification time my $asset = Mojo::Asset::Memory->new; $asset->add_chunk('Hello World!')->mtime(784111777); $c->res->headers->content_type('text/plain'); $c->reply->asset($asset); # Serve static file if it exists if (my $asset = $c->app->static->file('images/logo.png')) { $c->res->headers->content_type('image/png'); $c->reply->asset($asset); }
$c = $c->reply->exception('Oops!'); $c = $c->reply->exception(Mojo::Exception->new('Oops!'));
Render the exception template exception.$mode.$format.* or exception.$format.* and set the response status code to 500. Also sets the stash values exception to a Mojo::Exception object and snapshot to a copy of the "stash" for use in the templates.
exception.$mode.$format.*
exception.$format.*
500
exception
snapshot
$c = $c->reply->not_found;
Render the not found template not_found.$mode.$format.* or not_found.$format.* and set the response status code to 404. Also sets the stash value snapshot to a copy of the "stash" for use in the templates.
not_found.$mode.$format.*
not_found.$format.*
404
my $bool = $c->reply->static('images/logo.png'); my $bool = $c->reply->static('../lib/MyApp.pm');
Reply with a static file using "static" in Mojolicious, usually from the public directories or DATA sections of your application. Note that this helper does not protect from traversing to parent directories.
public
DATA
# Serve file with a custom content type $c->res->headers->content_type('application/myapp'); $c->reply->static('foo.txt');
%= session 'foo'
Alias for "session" in Mojolicious::Controller.
%= stash 'foo' % stash foo => 'bar';
Alias for "stash" in Mojolicious::Controller.
%= stash('name') // 'Somebody'
%= title % title 'Welcome!'; % title 'Welcome!', foo => 'bar';
Get or set title stash value, all additional key/value pairs get merged into the "stash".
title
%= ua->get('mojolicio.us')->res->dom->at('title')->text
Alias for "ua" in Mojo.
%= url_for 'named', controller => 'bar', action => 'baz'
Alias for "url_for" in Mojolicious::Controller.
%= url_with 'named', controller => 'bar', action => 'baz'
Does the same as "url_for", but inherits query parameters from the current request.
%= url_with->query([page => 2])
%= validation->param('foo')
Alias for "validation" in Mojolicious::Controller.
Mojolicious::Plugin::DefaultHelpers inherits all methods from Mojolicious::Plugin and implements the following new ones.
$plugin->register(Mojolicious->new);
Register helpers in Mojolicious application.
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
To install Mojolicious, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojolicious
CPAN shell
perl -MCPAN -e shell install Mojolicious
For more information on module installation, please visit the detailed CPAN module installation guide.