How to retrieve input data from request in Laravel: An example-driven guide

Updated: January 15, 2024 By: Guest Contributor Post a comment

Introduction

When building web applications with Laravel, managing incoming request data is a fundamental task that developers must handle. Laravel provides a powerful and elegant way to retrieve input data from HTTP requests. This guide will walk you through various methods available in Laravel to efficiently extract the data sent by clients to your application.

Prerequisites

  • Basic understanding of Laravel and MVC architecture
  • Laravel installation on your development machine. If you don’t have it yet, see this article: How to install Laravel on Windows and Mac.
  • A text editor or IDE
  • Composer globally installed

The Request Class

The primary tool for dealing with HTTP requests in Laravel is the Illuminate\Http\Request class, which provides numerous methods for identifying, validating, and extracting request data.

Accessing the Request Object

In any controller action, you can type-hint the request object like so:

public function store(Request $request)
{
    //
}

This will inject the current request instance into your method.

Retrieving Input Data

To retrieve data from the request, you can use a variety of methods provided by the request object. Let’s explore some of them.

All Input

$input = $request->all();

This method will return all input data from the request as an associative array.

Retrieving An Item

$name = $request->input('name');

You can also retrieve input data using the dynamic properties of the request object:

$name = $request->name;

For data that might not be present, you can define a default value:

$name = $request->input('name', 'Default Name');

Checking for Presence of Parameter

if ($request->has('name')) {
    //
}

This will return true if the request contains an item with the key 'name'.

Only Specific Data

$input = $request->only(['username', 'password']);

The above will return only specified data items, useful when you need a subset of the entire input.

Exclude Certain Data

$input = $request->except(['credit_card']);

On the contrary, except helps you get all the data except the specified keys.

Filtering & Validation

In many instances, it’s not just about retrieving input data but also ensuring its integrity and applicability for its intended use. Laravel provides robust validation tools that can be used directly within your controller methods or form request classes.

$validatedData = $request->validate([
    'title' => 'required|max:255',
    'body' => 'required',
]);

This snippet demonstrates quick inline request data validation using Laravel’s built-in validation rules.

Files & Uploads

Handling file uploads is a bit different from simple form data. The request object provides methods for this as well:

if ($request->hasFile('photo')) {
    $file = $request->file('photo');
    // Process the file...
}

Added to that, you can verify if the file is valid:

if ($request->file('photo')->isValid()) {
    //
}

Saving Uploaded Files

Laravel’s filesystem makes it easy to store uploaded files securely:

$path = $request->photo->store('images');

Advanced Usage

Laravel’s request class can cater to most use cases, but sometimes you’ll need to dive a bit deeper into the system’s functionality. This could be anything from transforming input data on-the-fly to more advanced file handling techniques.

Transforming Input Data

You might want to normalize or transform input data before running other operations. Middleware or form request classes can help you achieve this:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->slug),
    ]);
}

Conclusion

Retrieving and handling input data is crucial for any web application. Laravel provides a neat, fluent API to handle different types of inputs including advanced file handling and validation out of the box. With practice, the methods demonstrated here will be a valuable toolset in your Laravel development endeavors.