Skip to content

Controllers

Laureano F. Lamonega edited this page Jul 17, 2026 · 2 revisions

Controllers

Base Controller

Controllers extend Antimonial\Controller\Controller:

use Antimonial\Controller\Controller;
use Antimonial\Http\Request;

class UserController extends Controller
{
    public function index(Request $request): Response
    {
        return $this->view('users/index', ['users' => User::all()]);
    }
}

Creating Responses

View

return $this->view('users/index', ['users' => $users]);
return $this->view('users/index', $data, 'layouts/main');  // With layout

JSON

return $this->json(['users' => $users], 200);

Redirect

return $this->redirect('/users');
return $this->redirect('/login', 301);

Back

return $this->back($request);  // Redirect to HTTP_REFERER

File Download

return (new Response())->download('storage/report.pdf');
return (new Response())->download('storage/report.pdf', 'custom-name.pdf');

Serve File Inline

return (new Response())->file('storage/image.png');

Validation

protected function validate(Request $request, array $rules): array

Returns only the fields that have rules. Throws ValidationException (422) on failure.

Supported Rules

Rule Description
required Field must be present and non-empty
email Must be a valid email address
min:N Minimum length (string) or value (number)
max:N Maximum length (string) or value (number)
in:v1,v2 Must be one of the listed values
numeric Must be numeric
alpha Must contain only letters
alpha_num Must contain only letters and numbers

Example

public function store(Request $request): Response
{
    $data = $this->validate($request, [
        'name'  => 'required|min:2',
        'email' => 'required|email',
        'role'  => 'required|in:admin,user',
    ]);

    return $this->json(['created' => true], 201);
}

Clone this wiki locally