我希望在任何页面加载时将数据库引用数据预加载到会话中。
方案: 1)任何页面加载,检查会话是否存在数据。 2)如果是,则不执行任何操作,如果不将数据库中的数据加载到会话中。
知道我应该在哪里编码或者如何实现它?
答案 0 :(得分:0)
如果您想在每个页面视图上执行此操作(确保它确实是您的应用程序的每个请求),您可以在主控制器中创建__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);
}
如果您使用中间件解决方案,则需要将其添加到$ routeMiddleware数组中的Http / kernel.php中:
protected $routeMiddleware = [
//.....
'sessionSetter' => 'App\Http\Middleware\FillSessionData',
];
并将其包含在您希望此检查执行的控制器中,在构造函数中以及:
$this->middleware('sessionSetter');