我正在尝试设置中间件,以防止用户访问URL,除非他们将送货地址信息保存到我的数据库中。但是,它不起作用。
迁移:
Schema::create('addresses', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('user_id');
$table->string('street');
$table->string('city');
$table->string('state');
$table->string('zip');
$table->string('country');
$table->timestamps();
});
中间件:
public function handle($request, Closure $next)
{
if (!$request->user()->addresses('id')) {
return redirect('shipping');
}
return $next($request);
}
addresses()
关系方法返回一个true
QueryBuilder
。 我建议您改为使用聚合方法检查地址计数count
.
if ($request()->user()->addresses()->count() == 0) {
return redirect('shipping');
}
如果你的中间件名称是 ex 的关系,那么你可以给出一个参数(关系名称(,然后在你的中间件中使用它,就像这样 网络.php
Route::get('shipings/{user}', 'GetShipingController@index')->middleware('relation:addresses');
和中间件
public function handle($request, Closure $next, $relation)
{
if (!$request->user()->{$relation}()->count()) {
return redirect('shipping');
}
return $next($request);
}