我遇到了这个问题,我在Laravel 5.1中遇到了设置自定义中间件的问题
这就是我想要的。
我希望用户在登录我的应用时完成设置步骤。 如果他完成设置,他不应该再次看到该设置页面。 我也在全局数组中设置这个中间件。
这是我的中间件。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\RedirectResponse;
class SetupMiddleware
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($this->auth->check()){
if( $this->auth->user()->active == false ){
if ($request->ajax())
{
return response('Not verified.', 401);
}
else
{
return redirect('/user/verification');
}
}
if( $this->auth->user()->active != false && null === Auth::user()->school ){
if ($request->ajax())
{
return response('Not allowed.', 401);
}
else
{
return redirect('/setup/info');
}
}
if( $this->auth->user()->active != false && null !== Auth::user()->school && $this->auth->user()->payment_active == false ){
if ($request->ajax())
{
return response('Not allowed.', 401);
}
else
{
return redirect('/setup/payment');
}
}
if( $this->auth->user()->active != false && null !== Auth::user()->school && $this->auth->user()->payment_active != false ){
return $next($request);
}
return $next($request);
}
return $next($request);
}
}
他也不应该看到已经完成的步骤。假设用户是否创建了相关模型&#34; school&#34;他应该被重定向到'设置/付款'#39; url而不是&#39; setup / info&#39;。现在,即使我完成了所有步骤,我也可以登录并访问每一步。
如果条件匹配,则手动重定向到每个步骤是我到目前为止看到的唯一选项,但这种方法使我的控制器太混乱。
答案 0 :(得分:1)
您似乎并不理解编程流程。
如果您执行$this->auth->user()->active == false
,则无需执行$this->auth->user()->active != false
,就好像它会有错误一样,它会返回重定向标头。
所有其他条件都一样。
现在要处理实际问题,而不是使用middleware
,您应该使用表单请求方法,然后通过session保存用户当前步骤并使用您从会话获得的数据重定向他。 [应该创建一种帮助来处理重定向的实际路由]