Posts Learn Snippets Categories Tags About
/

How to Pass Data From Controller To Views in Laravel 8

Learn the different types of ways to pass the data from controller to blade views in Laravel 8

Created on Jun 29, 2021

57 views

There are 5 different ways to pass data from controller to blade views and depending on your chosen preference, you can pick whichever goes well with your code.

For the sake of the example, the views will be returned from the route body but in your case, it will be the controller.

Pass Array of Data
The first way is to pass an array of data to the second parameter of the "view" helper method like below.
Route::get('/articles', function () {
  $articles = Article::take(8)->get();
  $extraStuff = [1, 2, 3, 4];
  
  return view('articles.index', [
    'articles' => $articles,
    'extraStuff' => $extraStuff
  ]);
});

Pass by Chaining the Data
The second way is to pass it by chaining the view helper using the "with" method. 
Route::get('/articles', function () {
  $articles = Article::take(8)->get();
  $extraStuff = [1, 2, 3, 4];

  return view('articles.index')
    ->with('articles', $articles)
    ->with('extraStuff', $extraStuff);
});

Pass by using compact
The third way is to use "compact" helper function, with this method you can just pass in the variable you want to pass on to the view as a string.
Route::get('/articles', function () {
  $articles = Article::take(8)->get();
  $extraStuff = [1, 2, 3, 4];

  return view('articles.index', compact('articles', 'extraStuff'));
});

Sharing with All Views
The fourth way is to share data with all of the views. This can be defined from the "AppServiceProvider" class and on the "boot" method. These can also be considered as a global data sources.
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
  public function boot()
  {
    $extraStuff = [1, 2, 3, 4];

    View::share('extraStuff', $extraStuff);
  }
}

Sharing with View Composer
The final one is to share the data through view composer. View composer can share the data between multiple views or single views depending on your preference.

The place you register/define it is in the service provider boot method. In the case of below, the data will only be shared on the dashboard page. if you want to share it for all views, you can specify it as wildcard "*".
public function boot()
{
  // Using closure based composers...
  View::composer('dashboard', function ($view) {
    $extraStuff = [1, 2, 3, 4];

    $view->with('extraStuff', $extraStuff);
  });
}

Created by

PostSrc poster

PostSrc

Full stack developer mainly focusing on the front end side of the web. The main author of PostSrc and loves writing tutorial and guides online.