Forms

Web apps have to deal with forms almost every time. Entropy exposes a handful API that helps developers handle form requests in a simple way.

An example form for a feature like user registration may look like this:

        

views/register.atom.html

<form action="/users" method="post" enctype="multipart/form-data"> <input type="text" name="name" placeholder="Username"> <input type="email" name="email" placeholder="E-mail"> <input type="file" name="avatar"> <button>Register</button> </form>

Retrieving Form Fields

To obtain form control values, you need to explicitly define route request param of type Request:

      

src/users/user.controller.ts

import { HttpRequest } from '@entropy/http'; import { Controller, Route } from '@entropy/router'; export class UserController extends Controller { @Route.Post('/users') public async store([], request: HttpRequest) { const name = await request.input('name'); return `Hello ${name}!`; } }

As you can see, you can easly get access to form text fields using request.input method.

To easly obtain boolean values like type="checkbox" HTML inputs, use the request.boolean method:

        

views/register.atom.html

<form action="/users" method="post"> <!-- ... --> <input type="checkbox" name="newsletter"> <button>Register</button> </form>
      

src/users/user.controller.ts

export class UserController extends Controller { @Route.Post('/users') public async store([], request: HttpRequest) { const subscribe = await request.boolean('newsletter'); if (subscribe) { // Subscribe user to newsletter } } }

File Uploading

Entropy provides a simple form file uploading API as well, so you can easly send files through HTML forms without any additional configuration.

      

src/users/user.controller.ts

export class UserController extends Controller { @Route.Post('/users') public async store([], request: HttpRequest) { const file = await request.file('avatar'); await file.upload('public/avatars', 'avatar.png'); return 'User avatar uploaded successfully'; } }

Basically all you have to do is to provide file destination (in this case public/avatars) and Entropy will handle everything for you.

In case you don't provide file name argument, Entropy will generate a unique name for the uploaded file. It is very useful and recommended to use for features like posting images.

      

src/posts/post.controller.ts

export class PostController extends Controller { @Route.Post('/posts') public async store([], request: HttpRequest) { const file = await request.file('image'); const filename = await file.upload('public/images'); return `Successfully uploaded post image public/images/${filename}`; } }
Requests Views