How to Pass Data in Laravel

Laravel provides multiple ways to pass data between controllers, views, routes, and sessions. You can use the view() function to send data from a controller to a Blade view. Route parameters and form inputs allow dynamic data handling via the Request object. Sessions and flash messages help store data across requests. Choosing the right method depends on your use case, such as temporary messages, persistent storage, or dynamic routing.

Passing Data from Controller to View

In Controller:


public function index() {
    $name = 'Priya';
    return view('welcome', ['name' => $name]);
}

In Blade View (welcome.blade.php):


<h1>Welcome, {{ $name }}</h1>

2. Passing Data via Routes (Route Parameters)

In web.php:


Route::get('/user/{id}', function ($id) {
    return "User ID: " . $id;
});

Accessed like:


/user/5 → Output: User ID: 5

3. Passing Data via Form (POST Request)

Form View:


<form action="{{ route('submit') }}" method="POST">
    @csrf
    <input type="text" name="email">
    <button type="submit">Send</button>
</form>

In web.php:


Route::post('/submit', function (Illuminate\Http\Request $request) {
    return "Email: " . $request->input('email');
})->name('submit');

4. Using Session to Pass Data

Store session data:


session(['user' => 'Priya']);

Retrieve session data:


$user = session('user');
echo $user;

5. Redirect with Data (Flash Session)

Controller:


return redirect()->route('home')->with('status', 'Profile updated!');

In Blade:


@if (session('status'))
    
{{ session('status') }}
@endif

Summary – Laravel Data Passing Methods

Use Case Laravel Method
View from Controller view(..., [...])
Route parameter /route/{param}
Form data (POST) $request->input()
Temporary message after redirect with('key', 'value')
Persist data between pages session(['key' => val])