passing data from middleware to view or alternative way to show specific data in every page
laravel, laravel-5, php
Solution
I think in your use case, using a globally available view variable should suffice.
<?php
namespace App\Http\Middleware;
use Closure;
class CtegoryMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$request->merge(array("all_categories" => "abc"));
$request['all_categories']= 'abc';
/**
* This variable is available globally on all your views, and sub-views
*/
view()->share('global_all_categories', 'abc');
return $next($request);
}
}
The variable is loaded once (if you do database query, the query will only execute once), and the variable is then stored in the View factory.
Problem
in my website i have a fairly complected category which i have to show in every view (in the client side) so i thought i put the code for creating category in a middleware and pass the result to views so i've created my middleware but i cant figure out how can i pass its data to my view withouth having to do something in the controllers i've tried these methods in my middleware ``` <?php namespace App\Http\Middleware; use Closure; class CtegoryMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $request->merge(array("all_categories" => "abc")); $request['all_categories']= 'abc'; return $next($request); } } ``` route : ``` Route::group(['middleware' => ['category' ]], function () { Route::get('/', 'HomeController@index'); }); ``` but in my view when i echo all_categories i get ``` Undefined variable: all_categories ``` btw i've checked by echoing something , the middleware gets triggered on the request