To obtain an instance of the current HTTP request via dependency injection, you should type-hint the Request class on your controller method. The incoming request instance will automatically be injected by the [service container]:
module app.controller.index;
import hunt.framework;
class IndexController : Controller
{
mixin MakeController;
this()
{
}
@Action
void addPost()
{
auto name = request.session().get("name");
response.html(name ~ "<br> <a href=\"/list\">list</a>");
}
@Action
void del()
{
auto id = request.session().get("id");
response.html(id ~ "<br> <a href=\"/list\">list</a>");
}
}
We will discuss a few of the most important methods below.
The path method returns the request's path information. So, if the incoming request is targeted at http://domain.com/foo/bar, the path method will return foo/bar:
request.path;
To retrieve the full URL for the incoming request you may use the url or fullUrl methods. The url method will return the URL without the query string, while the fullUrl method includes the query string:
string url = request.url();
string fullUrl = request.fullUrl();
The method method will return the HTTP verb for the request:
HttpMethod method = request.method();
enum HttpMethod Null = HttpMethod("Null");
enum HttpMethod GET = HttpMethod("GET");
enum HttpMethod POST = HttpMethod("POST");
enum HttpMethod HEAD = HttpMethod("HEAD");
enum HttpMethod PUT = HttpMethod("PUT");
enum HttpMethod OPTIONS = HttpMethod("OPTIONS");
enum HttpMethod DELETE = HttpMethod("DELETE");
enum HttpMethod TRACE = HttpMethod("TRACE");
enum HttpMethod CONNECT = HttpMethod("CONNECT");
enum HttpMethod MOVE = HttpMethod("MOVE");
enum HttpMethod PROXY = HttpMethod("PROXY");
enum HttpMethod PRI = HttpMethod("PRI");
request.session().get("key");
request.cookie().get("name");
You may access uploaded files from a hunt.framework.http.Request instance using the file method or using dynamic properties. The file method returns an instance of the hunt.framework.file.UploadedFile class:
UploadedFile file = request.file("key");
UploadedFile files = request.files("key");
You may determine if a file is present on the request using the hasFile method:
if (request.hasFile("key"))
{
//
}
In addition to checking if the file is present, you may verify that there were no problems uploading the file via the isValid method:
if (request.file("key").isValid()) {
//
}
The UploadedFile class also contains methods for accessing the file's fully-qualified path and its extension. The extension method will attempt to guess the file's extension based on its contents. This extension may be different from the extension that was supplied by the client:
string extension = request.path("key").extension();
There are a variety of other methods available on UploadedFile instances.
To store an uploaded file, you will typically use one of your configured . The UploadedFile class has a store method which will move an uploaded file to one of your disks, which may be a location on your local filesystem or even a cloud storage location like Amazon S3.
The store method accepts the path where the file should be stored relative to the filesystem's configured root directory. This path should not contain a file name, since a unique ID will automatically be generated to serve as the file name.
The store method also accepts an optional second argument for the name of the disk that should be used to store the file. The method will return the path of the file relative to the disk's root:
bool stored = request.path("key").store("images");