如何将数据预加载到laravel会话中?

时间:2015-07-27 03:02:44

标签: laravel

我希望在任何页面加载时将数据库引用数据预加载到会话中。

方案: 1)任何页面加载,检查会话是否存在数据。 2)如果是,则不执行任何操作,如果不将数据库中的数据加载到会话中。

知道我应该在哪里编码或者如何实现它?

1 个答案:

答案 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');