Если вы хотите выполнить это на каждом просмотре страницы (убедитесь, что это действительно каждый запрос, поступающий в ваше приложение), вы можете создать __constructor
в своем основном контроллере (Http/Controllers/Controller.php) и заполнить сеанс там.
namespace App\Http\Controllers;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
abstract class Controller extends BaseController
{
use DispatchesJobs, ValidatesRequests;
public function __construct() {
// fill session here
}
}
Другой способ, конечно, промежуточное. Преимущество здесь также заключается в «недостатке» - вам нужно будет вставить промежуточное ПО в каждый контроллер, который вы хотите проверить, но вы можете выбрать некоторые маршруты/контроллеры, которые не должны выполнять эту проверку.
class FillSessionData {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
// fill session here
return $next($request);
}
Если вы идете с раствором промежуточного слоя, вам нужно добавить его к вашему Http/kernel.php в массиве $ routeMiddleware:
protected $routeMiddleware = [
//.....
'sessionSetter' => 'App\Http\Middleware\FillSessionData',
];
и включить его в контроллер, который требуется эту проверку выполнить в конструкторе также с помощью:
$this->middleware('sessionSetter');
Спасибо, первый метод работает! – LoveZero
Добро пожаловать @LoveZero – baao