Добавить переменную ко всем маршрутам - PullRequest
1 голос
/ 28 мая 2019

Мне нужно отобразить переменную (взятую из пользовательской модели) для всех маршрутов в моем приложении, которая не влияет на маршрут, на котором она отображается. Таким образом, home / variable будет отображать одну и ту же домашнюю страницу независимо от этой переменной для всех пользователей. Если пользователь просто заходит в myapp / home, переменная добавляется в URL как myapp / home / variable.

У меня уже есть желаемый результат с приведенным ниже в web.php, но я должен делать это с каждым маршрутом, поэтому, если мое приложение имеет две страницы, я делаю одно и то же перенаправление для / home и / example. Это также означает, что я должен добавлять переменную всякий раз, когда я перенаправляю с другого контроллера.

Route::get( '/example',function(){   
    $var  = Auth::user()->thevariable;
    return redirect('example/'.$var);
}); 
Route::get( 'example/{var}','ExampleController@index');

// changes the url from example, to example/variable, and also returns
the correct controller / view if directed to example/variable.

В моих контроллерах я делаю что-то подобное, чтобы перенаправить при необходимости:

return redirect()->action('HomeController@index',$user->thevariable)
//I can also just redirect to the /home url and the variable is added 
automatically, but this messes up passing session data.

Можно ли сделать это лучше с помощью композитора, промежуточного программного обеспечения или даже через RouteServiceProvider? Если кто-нибудь и укажет мне правильное направление, это будет с благодарностью (Laravel 5.4).

1 Ответ

1 голос
/ 28 мая 2019

Насколько мне известно: если вы хотите использовать разные пути, вам нужно записать каждый путь в маршрутизации. Но решение, которое будет выбрано, будет приниматься промежуточным программным обеспечением. Таким образом, вы создаете свое собственное промежуточное программное обеспечение и присоединяете сюда ко всем этим путям с помощью ->middleware('myOwnMW');. Должно понравиться:

<?php

namespace App\Http\Middleware;

use Closure;

class myOwnMW
{

public function handle($request, Closure $next)
{
    if (Auth::user()->thevariable) {
        //redirect to your path
        $uri = $request->path() . '/'. $variableIwantToAttach;
        return redirect($uri);
    }

    return $next($request);
}
}

Надеюсь, вы поняли идею. Проверьте здесь путь . Не забудьте зарегистрировать ваше промежуточное ПО внутри Kernel.php, и вот учебник , который я использовал некоторое время назад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...