NAME
Mojolicious::Controller - Controller Base Class
SYNOPSIS
DESCRIPTION
Mojolicious::Controller is the base class for your Mojolicious controllers. It is also the default controller class for Mojolicious unless you set controller_class
in your application.
ATTRIBUTES
Mojolicious::Controller inherits all attributes from Mojo::Base and implements the following new ones.
app
my $app = $c ->app;
$c = $c ->app(Mojolicious->new);
|
A reference back to the Mojolicious application that dispatched to this controller.
match
A Mojolicious::Routes::Match object containing the routes results for the current request.
tx
The transaction that is currently being processed, defaults to a Mojo::Transaction::HTTP object.
METHODS
Mojolicious::Controller inherits all methods from Mojo::Base and implements the following new ones.
cookie
$c = $c ->cookie( foo => 'bar' );
$c = $c ->cookie( foo => 'bar' , { path => '/' });
my $value = $c ->cookie( 'foo' );
my @values = $c ->cookie( 'foo' );
|
Access request cookie values and create new response cookies.
finish
$c ->finish;
$c ->finish( 'Bye!' );
|
Gracefully end WebSocket connection or long poll stream.
flash
my $flash = $c ->flash;
my $foo = $c ->flash( 'foo' );
$c = $c ->flash({ foo => 'bar' });
$c = $c ->flash( foo => 'bar' );
|
Data storage persistent for the next request, stored in the session.
$c ->flash->{foo} = 'bar' ;
my $foo = $c ->flash->{foo};
delete $c ->flash->{foo};
|
on_finish
$c ->on_finish( sub {...});
|
Callback to be invoked when the transaction has been finished.
$c ->on_finish( sub {
my $c = shift ;
});
|
on_message
$c = $c ->on_message( sub {...});
|
Callback to be invoked when new WebSocket messages arrive.
$c ->on_message( sub {
my ( $c , $message ) = @_ ;
});
|
param
my @names = $c ->param;
my $foo = $c ->param( 'foo' );
my @foo = $c ->param( 'foo' );
$c = $c ->param( foo => 'ba;r' );
|
Access GET/POST parameters and route captures that are not reserved stash values.
my $foo = $c ->req->url->query->param( 'foo' );
my $foo = $c ->req->param( 'foo' );
|
redirect_to
$c = $c ->redirect_to( 'named' );
$c = $c ->redirect_to( 'named' , foo => 'bar' );
$c = $c ->redirect_to( '/path' );
|
Prepare a 302
redirect response, takes the exact same arguments as url_for
.
return $c ->redirect_to( 'login' ) unless $c ->session( 'user' );
|
render
$c ->render;
$c ->render( controller => 'foo' , action => 'bar' );
$c ->render({ controller => 'foo' , action => 'bar' });
$c ->render( text => 'Hello!' );
$c ->render( template => 'index' );
$c ->render( template => 'foo/index' );
$c ->render( template => 'index' , format => 'html' , handler => 'epl' );
$c ->render( handler => 'something' );
$c ->render( 'foo/bar' );
$c ->render( 'foo/bar' , format => 'html' );
|
This is a wrapper around Mojolicious::Renderer exposing pretty much all functionality provided by it. It will set a default template to use based on the controller and action name or fall back to the route name. You can call it with a hash of options which can be preceded by an optional template name. It will also run the before_render
plugin hook.
render_content
my $output = $c ->render_content;
my $output = $c ->render_content( 'header' );
my $output = $c ->render_content( header => 'Hello world!' );
my $output = $c ->render_content( header => sub { 'Hello world!' });
|
Contains partial rendered templates, used for the renderers layout
and extends
features.
render_data
$c ->render_data( $bits );
$c ->render_data( $bits , format => 'png' );
|
Render the given content as raw bytes, similar to render_text
but data will not be encoded.
render_exception
$c ->render_exception( 'Oops!' );
$c ->render_exception(Mojo::Exception->new( 'Oops!' ));
|
Render the exception template exception.$mode.html.$handler
or exception.html.$handler
and set the response status code to 500
.
render_json
$c ->render_json({ foo => 'bar' });
$c ->render_json([1, 2, -3]);
|
Render a data structure as JSON.
render_later
Disable auto rendering, especially for long polling this can be quite useful.
$c ->render_later;
Mojo::IOLoop->timer( 2 => sub {
$c ->render( text => 'Delayed by 2 seconds!' );
});
|
render_not_found
$c ->render_not_found;
$c ->render_not_found( $resource );
|
Render the not found template not_found.$mode.html.$handler
or not_found.html.$handler
and set the response status code to 404
.
render_partial
my $output = $c ->render_partial( 'menubar' );
my $output = $c ->render_partial( 'menubar' , format => 'txt' );
|
Same as render
but returns the rendered result.
render_static
my $success = $c ->render_static( 'images/logo.png' );
my $success = $c ->render_static( '../lib/MyApp.pm' );
|
Render a static file using Mojolicious::Static relative to the public
directory of your application.
render_text
$c ->render_text( 'Hello World!' );
$c ->render_text( 'Hello World' , layout => 'green' );
|
Render the given content as Perl characters, which will be encoded to bytes. See render_data
for an alternative without encoding. Note that this does not change the content type of the response, which is text/html;charset=UTF-8
by default.
$c ->render_text( 'Hello World!' , format => 'txt' );
|
rendered
$c = $c ->rendered;
$c = $c ->rendered(302);
|
Finalize response and run after_dispatch
plugin hook.
req
Alias for $c->tx->req
. Usually refers to a Mojo::Message::Request object.
res
Alias for $c->tx->res
. Usually refers to a Mojo::Message::Response object.
send_message
$c = $c ->send_message( 'Hi there!' );
$c = $c ->send_message( 'Hi there!' , sub {...});
|
Send a message via WebSocket, only works if there is currently a WebSocket connection in progress.
session
my $session = $c ->session;
my $foo = $c ->session( 'foo' );
$c = $c ->session({ foo => 'bar' });
$c = $c ->session( foo => 'bar' );
|
Persistent data storage, by default stored in a signed cookie. Note that cookies are generally limited to 4096 bytes of data.
$c ->session->{foo} = 'bar' ;
my $foo = $c ->session->{foo};
delete $c ->session->{foo};
|
signed_cookie
$c = $c ->signed_cookie( foo => 'bar' );
$c = $c ->signed_cookie( foo => 'bar' , { path => '/' });
my $value = $c ->signed_cookie( 'foo' );
my @values = $c ->signed_cookie( 'foo' );
|
Access signed request cookie values and create new signed response cookies. Cookies failing signature verification will be automatically discarded.
stash
my $stash = $c ->stash;
my $foo = $c ->stash( 'foo' );
$c = $c ->stash({ foo => 'bar' });
$c = $c ->stash( foo => 'bar' );
|
Non persistent data storage and exchange.
$c ->stash->{foo} = 'bar' ;
my $foo = $c ->stash->{foo};
delete $c ->stash->{foo};
|
ua
A Mojo::UserAgent prepared for the current environment.
my $tx = pop ;
$c ->render_data( $tx ->res->body);
});
|
url_for
my $url = $c ->url_for;
my $url = $c ->url_for( controller => 'bar' , action => 'baz' );
my $url = $c ->url_for( 'named' , controller => 'bar' , action => 'baz' );
my $url = $c ->url_for( '/perldoc' );
|
Generate a portable Mojo::URL object with base for a route, path or URL.
print $c ->url_for( '/perldoc' );
print $c ->url_for( '/perldoc' );
|
write
$c -> write ;
$c -> write ( 'Hello!' );
$c -> write ( sub {...});
$c -> write ( 'Hello!' , sub {...});
|
Write dynamic content chunk wise, the optional drain callback will be invoked once all data has been written to the kernel send buffer or equivalent.
$c ->res->headers->content_length(6);
$c -> write ( 'Hel' , sub {
my $c = shift ;
$c -> write ( 'lo!' )
});
$c -> write ( 'Hel' , sub {
my $c = shift ;
$c -> write ( 'lo!' , sub {
my $c = shift ;
$c ->finish;
});
});
|
write_chunk
$c ->write_chunk;
$c ->write_chunk( 'Hello!' );
$c ->write_chunk( sub {...});
$c ->write_chunk( 'Hello!' , sub {...});
|
Write dynamic content chunk wise with the chunked
Transfer-Encoding
which doesn't require a Content-Length
header, the optional drain callback will be invoked once all data has been written to the kernel send buffer or equivalent.
$c ->write_chunk( 'He' , sub {
my $c = shift ;
$c ->write_chunk( 'll' , sub {
my $c = shift ;
$c ->finish( 'o!' );
});
});
|
You can call finish
at any time to end the stream.
HELPERS
In addition to the attributes and methods above you can also call helpers on instances of Mojolicious::Controller. This includes all helpers from Mojolicious::Plugin::DefaultHelpers and Mojolicious::Plugin::TagHelpers.
$c ->layout( 'green' );
$c ->title( 'Welcome!' );
|
SEE ALSO
Mojolicious, Mojolicious::Guides, http://mojolicio.us.