$ request->会话在Laravel 5.3资源控制器中不起作用

时间:2016-11-01 15:16:04

标签: php laravel oop session laravel-5.3

首先,我已经在其他控制器(不在资源控制器中)检查我的会话工作得很好,但是当我在资源控制器中执行它时,我的get会话代码不起作用。

这是我的资源控制器

  <?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

//tambahan
use DB;
use Session;

//model
use App\_admins;
use App\Mahasiswas;

class MahasiswaController extends Controller
{
    protected $data;
    protected $token;

    public function __contruct(){
        $this->data = array();
        $this->middleware(function ($request, $next) {
            $this->token = $request->session()->get('_admin_id');
            if (!$request->session()->has('_admin_id')) {
                abort(404);
            }
            return $next($request);
        });
    }

    private function user($token){
        $this->data['query'] = _admins::find($token);
    }

    public function index(){
        echo $this->token;
    }

还有更多的公共功能,但它仍然是空的,所以我没有在这里展示以避免混淆。这是我在web.php中的路线:

Route::group(['namespace' => 'Admin'],function(){

    Route::resource('/admin/mahasiswa','MahasiswaController');
    Route::resource('/admin/nilai','NilaiController');

});

1 个答案:

答案 0 :(得分:2)

5.3中,constructor中的中间件尚未运行,因此您无法收集session个数据。但是使用基于闭包的方法,您应该可以使用以下内容访问它:

$this->middleware(function($request, $next) {
    // Get the session value (uses global helper)
    $this->token = session('_admin_id');

    // If the value is null, abort the request
    if (null === $this->token) abort(404);

    return $next($request);
});