An abstract implementation of BaseController to make it slightly easier to use.
Define a set of extractors allowing to pattern match on the Accept HTTP header of a request
Convenient class to generate extractors checking if a given mime type matches the Accept header of a request.
Convenient class to generate extractors checking if a given mime type matches the Accept header of a request. Example of use:
val AcceptsMp3 = Accepting("audio/mp3")
Then:
request match { case AcceptsMp3() => ... }
An action is essentially a (Request[A] => Result) function that handles a request and generates a result to be sent to the client.
An action is essentially a (Request[A] => Result) function that handles a request and generates a result to be sent to the client.
For example,
val echo = Action { request => Ok("Got request [" + request + "]") }
the type of the request body
Provides helpers for creating Action values.
A simple kind of ActionRefiner which, given a request (of type R), may either immediately produce a Result (for example, an error), or continue its Action block with the same request.
A simple kind of ActionRefiner which, given a request (of type R), may either immediately produce a Result (for example, an error), or continue its Action block with the same request. The critical (abstract) function is filter.
A builder for generic Actions that generalizes over the type of requests.
A builder for generic Actions that generalizes over the type of requests. An ActionFunction[R,P] may be chained onto an existing ActionBuilder[R] to produce a new ActionBuilder[P] using andThen. The critical (abstract) function is invokeBlock. Most users will want to use ActionBuilder instead.
the type of the request on which this is invoked (input)
the parameter type which blocks executed by this builder take (output)
A simple kind of ActionFunction which, given a request (of type R), may either immediately produce a Result (for example, an error), or call its Action block with a parameter (of type P).
A simple kind of ActionFunction which, given a request (of type R), may either immediately produce a Result (for example, an error), or call its Action block with a parameter (of type P). The critical (abstract) function is refine.
A simple kind of ActionRefiner which, given a request (of type R), unconditionally transforms it to a new parameter type (P) to be passed to its Action block.
A simple kind of ActionRefiner which, given a request (of type R), unconditionally transforms it to a new parameter type (P) to be passed to its Action block. The critical (abstract) function is transform.
A request body that adapts automatically according the request Content-Type.
AnyContent - Form url encoded body
AnyContent - Json body
AnyContent - Multipart form data body
AnyContent - Raw body (give access to the raw data as bytes).
AnyContent - Text body
AnyContent - XML body
Defines utility methods to generate Action
and Results
types.
Defines utility methods to generate Action
and Results
types.
For example:
class HomeController @Inject() (val controllerComponents: ControllerComponents) extends BaseController { def hello(name:String) = Action { request => Ok("Hello " + name) } }
This is intended to provide the idiomatic Play API for actions, allowing you to use "Action" for the default action builder and "parse" to access Play's default body parsers. You may want to extend this to provide your own base controller class, or write your own version with similar code.
Useful prewired mixins for controller components, assuming an available ControllerComponents.
Useful prewired mixins for controller components, assuming an available ControllerComponents.
If you want to extend your own AbstractController but want to use a different base "Action", you can mix in this trait.
A body parser parses the HTTP request body content.
A body parser parses the HTTP request body content.
the body content type
A set of reusable body parsers and utilities that do not require configuration.
Legacy body parsers trait.
Legacy body parsers trait. Basically all this does is define a "parse" member with a PlayBodyParsers instance constructed from the running app's settings. If no app is running, we create parsers using default settings and an internally-created materializer. This is done to support legacy behavior. Instead of using this trait, we suggest injecting an instance of PlayBodyParsers (either directly or through BaseController or one of its subclasses).
Defines a Call
, which describes an HTTP request and can be used to create links or fill redirect data.
Defines a Call
, which describes an HTTP request and can be used to create links or fill redirect data.
These values are usually generated by the reverse router.
the request HTTP method
the request URL
A Codec handle the conversion of String to Byte arrays.
A Codec handle the conversion of String to Byte arrays.
The charset to be sent to the client.
The transformation function.
The base controller components dependencies that most controllers rely on.
Useful mixins for controller classes.
Useful mixins for controller classes.
If you wish to write a controller with minimal dependencies, you can mix in this trait, which includes helpers and useful constants.
class MyController @Inject() (action: DefaultActionBuilder, parse: PlayBodyParsers) extends ControllerHelpers { def index = action(parse.text) { Ok } }
An HTTP cookie.
An HTTP cookie.
the cookie name
the cookie value
the cookie expiration date in seconds, None
for a transient cookie, or a value 0 or less to expire a cookie now
the cookie path, defaulting to the root path /
the cookie domain
whether this cookie is secured, sent only for HTTPS requests
whether this cookie is HTTP only, i.e. not accessible from client-side JavaScript code
Trait that should be extended by the Cookie helpers.
This trait encodes and decodes data to a string used as cookie value.
Logic for encoding and decoding Cookie
and Set-Cookie
headers.
The HTTP cookies set.
A cookie module that uses JWT as the cookie encoding, falling back to URL encoding.
A trait representing the default action builder used by Play's controllers.
A trait representing the default action builder used by Play's controllers.
This trait is used for binding, since some dependency injection frameworks doesn't deal with types very well.
The default implementation of CookieHeaders
.
A session cookie that reads in both signed and JWT cookies, and writes out JWT cookies.
A cookie to be discarded.
A cookie to be discarded. This contains only the data necessary for discarding a cookie.
the name of the cookie to discard
the path of the cookie, defaults to the root path
the cookie domain
whether this cookie is secured
An EssentialAction
underlies every Action
.
An EssentialAction
underlies every Action
. Given a RequestHeader
, an
EssentialAction
consumes the request body (an ByteString
) and returns
a Result
.
An EssentialAction
is a Handler
, which means it is one of the objects
that Play uses to handle requests.
A trait that identifies the cookie encoding and uses the appropriate codec, for upgrading from a signed cookie encoding to a JWT cookie encoding.
Implement this interface if you want to add a Filter to your application
Implement this interface if you want to add a Filter to your application
object AccessLog extends Filter { override def apply(next: RequestHeader => Future[Result])(request: RequestHeader): Future[Result] = { val result = next(request) result.map { r => play.Logger.info(request + "\n\t => " + r; r } } }
HTTP Flash scope.
HTTP Flash scope.
Flash data are encoded into an HTTP cookie, and can only contain simple String
values.
Helper utilities to manage the Flash cookie.
An Handler handles a request.
An Handler handles a request. Play understands several types of handlers,
for example EssentialAction
s and WebSocket
s.
The Handler
used to handle the request is controlled by GlobalSetting
s's
onRequestReceived
method. The default implementation of
onRequestReceived
delegates to onRouteRequest
which calls the default
Router
.
The HTTP headers set.
A variation of BaseController that gets its components via method injection.
JWT cookie encoding and decoding functionality
Transform a value to a Javascript literal.
Transform a value to a Javascript literal.
A cookie module that uses the urlencoded cookie encoding.
A session cookie baker that signs the session cookie in the Play 2.5.x style.
Signal a max content size exceeded.
The status of a max size flow.
An abstract controller class that returns a MessagesRequest as the default Action.
An abstract controller class that returns a MessagesRequest as the default Action.
An abstract implementation of MessagesBaseController to make it slightly easier to use.
class MyController @Inject()(cc: MessagesControllerComponents) extends MessagesAbstractController(cc) { def index = Action { implicit request: MessagesRequest[AnyContent] => Ok(views.html.formTemplate(form)) // twirl template with form builders } }
This trait is an ActionBuilder that provides a MessagesRequest to the block:
This trait is an ActionBuilder that provides a MessagesRequest to the block:
class MyController @Inject()( messagesAction: MessagesActionBuilder, cc: ControllerComponents ) extends AbstractController(cc) { def index = messagesAction { implicit request: MessagesRequest[AnyContent] => Ok(views.html.formTemplate(form)) // twirl template with form builders } }
This is useful when you don't want to have to add play.api.i18n.I18nSupport to a controller for form processing.
A base controller that returns a MessagesRequest as the base Action.
Controller components with a MessagesActionBuilder.
This class is a wrapped Request that is "i18n-aware" and can return the preferred messages associated with the request.
This class is a wrapped Request that is "i18n-aware" and can return the preferred messages associated with the request.
the body type of the request
This trait is a RequestHeader that can provide a play.api.i18n.Messages instance.
This trait is a RequestHeader that can provide a play.api.i18n.Messages instance.
This is very useful with when used for forms processing, as the form helpers defined in views.helper (e.g. inputText.scala.html) take a MessagesProvider.
Multipart form data body.
Binder for URL path parameters.
Binder for URL path parameters.
You can provide an implementation of PathBindable[A]
for any type A
you want to be able to
bind directly from the request path.
For example, given this class definition:
case class User(id: Int, name: String, age: Int)
You can define a binder retrieving a User
instance from its id, useable like the following:
// In your routes: // GET /show/:user controllers.Application.show(user) // For example: /show/42 class HomeController @Inject() (val controllerComponents: ControllerComponents) extends BaseController { def show(user: User) = Action { ... } }
The definition of binder can look like the following:
object User { implicit def pathBinder(implicit intBinder: PathBindable[Int]) = new PathBindable[User] { override def bind(key: String, value: String): Either[String, User] = { for { id <- intBinder.bind(key, value).right user <- User.findById(id).toRight("User not found").right } yield user } override def unbind(key: String, user: User): String = { intBinder.unbind(key, user.id) } } }
Body parsers officially supported by Play (i.e.
Body parsers officially supported by Play (i.e. built-in to Play)
DO NOT EXTEND this trait in user or library code. It is intended only to represent Play's built-in body parsers. We may add methods here in the future, which may break binary compatibility for Scala 2.11 code.
This trait is a play.api.i18n.MessagesProvider that can be applied to a RequestHeader, and uses messagesApi.preferred(requestHeader) to return the messages.
Binder for query string parameters.
Binder for query string parameters.
You can provide an implementation of QueryStringBindable[A]
for any type A
you want to be able to
bind directly from the request query string.
For example, if you have the following type to encode pagination:
/** * @param index Current page index * @param size Number of items in a page */ case class Pager(index: Int, size: Int)
Play will create a Pager(5, 42)
value from a query string looking like /foo?p.index=5&p.size=42
if you define
an instance of QueryStringBindable[Pager]
available in the implicit scope.
For example:
object Pager { implicit def queryStringBinder(implicit intBinder: QueryStringBindable[Int]) = new QueryStringBindable[Pager] { override def bind(key: String, params: Map[String, Seq[String]]): Option[Either[String, Pager]] = { for { index <- intBinder.bind(key + ".index", params) size <- intBinder.bind(key + ".size", params) } yield { (index, size) match { case (Right(index), Right(size)) => Right(Pager(index, size)) case _ => Left("Unable to bind a Pager") } } } override def unbind(key: String, pager: Pager): String = { intBinder.unbind(key + ".index", pager.index) + "&" + intBinder.unbind(key + ".size", pager.size) } } }
To use it in a route, just write a type annotation aside the parameter you want to bind:
GET /foo controllers.foo(p: Pager)
Handle the request body a raw bytes data.
Handle the request body a raw bytes data.
If the content size is bigger than this limit, the content is stored as file.
the temporary file creator to store the content as file.
the initial data, ByteString.empty by default.
The complete HTTP request.
The complete HTTP request.
the body content type.
The HTTP request header.
The HTTP request header. Note that it doesn’t contain the request body yet.
Useful mixin for methods that do implicit transformations of a request
A simple HTTP response header, used for standard responses.
A simple result, which defines the response header and a body ready to send to the client.
A simple result, which defines the response header and a body ready to send to the client.
the response header, which contains status code and HTTP headers
the response body
Helper utilities to generate results.
HTTP Session.
HTTP Session.
Session data are encoded into an HTTP cookie, and can only contain simple String
values.
Helper utilities to manage the Session cookie.
This trait writes out cookies as url encoded safe text format, optionally prefixed with a signed code.
A WebSocket handler.
Wrap an existing request.
Wrap an existing request. Useful to extend a request.
If you need to add extra values to a request, you could consider
using request attributes instead. See the attr
, withAttr
, etc
methods.
Implements deprecated controller functionality.
Implements deprecated controller functionality. We recommend moving away from this and using one of the classes or traits extending BaseController instead.
(Since version 2.6.0) Your controller should extend AbstractController, BaseController, or InjectedController instead.
A handler that is able to tag requests.
A handler that is able to tag requests. Usually mixed in to other handlers.
Instead of using the handler you should use Handler.Stage.
Handler.Stage
is a handler improves upon the RequestTaggingHandler
in several ways:
(a) Handler.Stage
can be nested to arbitrary depth, (b) it doesn't require
mixing-in and (c) it allows handlers to be rewritten as well as requests, (d) it
prevents Play from accessing the real handler until its logic has been run.
(Since version 2.6.0) Use Handler.Stage instead
Factory object for creating an AnyContent instance.
Factory object for creating an AnyContent instance. Useful for unit testing.
AnyContent - Empty request body
Helper object to construct BodyParser
values.
Default BodyParsers.
Default Codec support.
Utilities for merging individual cookie values in HTTP cookie headers.
Helper utilities to encode Cookies.
Helper for creating EssentialAction
s.
Compose the action and the Filters to create a new Action
Compose the action and the Filters to create a new Action
Default JavaScript literals converters.
Signal max size is not exceeded.
Defines parts handled by Multipart form data.
Default binders for URL path part.
Default binders for Query String
Helper utilities to generate results.
Helpers to create secure actions.
Helper utilities to generate WebSocket results.
Helper object to create Action
values.
Helper object to create Action
values.
(Since version 2.6.0)
Contains the Controller/Action/Result API to handle HTTP requests.
For example, a typical controller: