Laravel 5.2软件包:Auth方法在控制器的构造函数中失败

时间:2016-07-17 07:41:11

标签: php laravel-5 laravel-middleware

我为我的软件包添加了一个控制器,我需要在该控制器的构造函数中调用Auth方法,但是我收到以下错误:

  

Container.php第734行中的ReflectionException:   类哈希不存在

这是我的代码:

use Auth;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Session;

class CartController extends Controller
{
    private $customer;

    public function __construct()
    {
         $this->middleware('auth', ['except' => ['add']]);
         $multiauth = config('cart.multiauth');
         if ($multiauth) {
             $guard       = config('auth.defaults.guard');
             $this->customer = Auth::guard($guard)->user();
         } else {
             $this->customer = Auth::user();
         }
    }

    public function add()
    {
        // Code
    }
}

当我在其他函数中添加构造函数的代码时,它可以正常工作,但是当从控制器的构造函数调用它时它会失败。

我已经搜索了很多,发现没有可行的解决方案。

2 个答案:

答案 0 :(得分:1)

我通过添加中间件解决了这个问题:

namespace myNamespace\myPackage;

use Closure;
use Illuminate\Support\Facades\Auth;

class CustomerMiddleware
{
     public function handle($request, Closure $next)
     {
         $multiauth = config('cart.multiauth');
         if ($multiauth) {
             $guard   = config('auth.defaults.guard');
             $customer = Auth::guard($guard)->user();
         } else {
             $customer = Auth::user();
         }

         $request->attributes->add(['customer' => $customer]);

         return $next($request);
     }
}

然后我将这个中间件用于'购物车/添加'路线:

Route::group(['middleware' => ['web']], function () {
    Route::group(['middleware' => 'customer'], function() {
        Route::post('cart/add',
                    'myNamespace\myPackage\CartController@add');
    });
});

因此,通过检查'CartController'的'add'方法中的$ request-> get('customer')参数,我可以访问当前用户的信息:

class CartController extends Controller
{
    public function __construct() { }

    public function add()
    {
       $customer = $request->get('customer');
       // Code 
    }
}

我希望这有助于其他人:)

答案 1 :(得分:0)

您无法在控制器__construct中使用中间件,创建函数并使用它