Essentials
Requests & Responses
Read request data and return consistent JSON responses
Glueful controllers work with Symfony Request objects and Glueful Response helpers.
Reading Request Data
In controllers that extend BaseController, use the helper methods that already exist:
use Symfony\Component\HttpFoundation\Request;
public function store(Request $request)
{
$data = $this->getRequestData();
$email = $request->request->get('email');
$page = (int) $request->query->get('page', 1);
$token = $request->headers->get('Authorization');
}
JSON Requests
BaseController::getRequestData() detects JSON requests and returns a parsed array:
public function store(Request $request)
{
$data = $this->getRequestData();
return $this->success([
'received' => $data,
]);
}
Files
public function upload(Request $request)
{
$file = $request->files->get('avatar');
if ($file === null) {
return Response::validation([
'avatar' => ['Avatar is required.'],
]);
}
return Response::success([
'filename' => $file->getClientOriginalName(),
]);
}
Response Helpers
Glueful’s Response class standardizes JSON output.
Success
use Glueful\Http\Response;
return Response::success($data);
return Response::success($data, 'Users retrieved');
return Response::created($user);
return Response::noContent();
Errors
return Response::notFound('User not found');
return Response::unauthorized('Invalid token');
return Response::forbidden('Access denied');
return Response::validation([
'email' => ['Email is required.'],
]);
return Response::error('Something went wrong', 500);
Pagination
public function index(Request $request): Response
{
$page = (int) $request->query->get('page', 1);
$perPage = 20;
$users = $this->db->table('users')
->limit($perPage)
->offset(($page - 1) * $perPage)
->get();
$total = $this->db->table('users')->count();
return Response::paginated($users, $total, $page, $perPage);
}
Recommended Pattern
For most controllers in the API skeleton:
public function store(Request $request): Response
{
$data = $this->getRequestData();
if ($error = $this->validateRequest($data, [
'title' => 'required|max:255',
])) {
return $error;
}
return $this->created([
'title' => $data['title'],
]);
}