передача данных из промежуточного программного обеспечения для просмотра или альтернативный способ отображения определенных данных на каждой странице


На моем веб-сайте у меня есть довольно сложная категория, которую я должен показывать в каждом представлении (на стороне клиента), поэтому я подумал, что поместил код для создания категории в промежуточное программное обеспечение и передал результат в представления

Итак, я создал свое промежуточное программное обеспечение, но я не могу понять, как я могу передать его данные в свое представление без необходимости что-то делать в контроллерах . Я пробовал эти методы в своем промежуточном программном обеспечении

<?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::group(['middleware' => ['category' ]], function () {
     Route::get('/', 'HomeController@index');
});

Но, на мой взгляд, когда я повторяю all_categories, я получить

Undefined variable: all_categories 

кстати, я проверил, повторив что-то, промежуточное программное обеспечение запускается по запросу

Author: hretic, 2016-10-21

1 answers

Я думаю, что в вашем случае использования глобально доступной переменной представления должно быть достаточно.

<?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);
    }
}

Переменная загружается один раз (если вы выполняете запрос к базе данных, запрос будет выполнен только один раз), а затем переменная сохраняется в фабрике представлений.

 6
Author: JofryHS, 2016-10-21 00:44:51