在控制器之间传递变量并返回(PHP)

时间:2017-12-25 18:32:51

标签: php json laravel laravel-5 laravel-middleware

可能是一个非常简单的问题,但我是新手,在尝试寻找类似的我仍然不确定之后:

所以我有一个AJAX表格指向:

function postLogin(Request $request){
   $this->fatherAuth($request); 

   return response() -> json(['url' => '/login-ok',], 200); 
}

然后我有:

public function fatherAuth($request){

    $validator = Validator::make($request->all(), [
        'email' => 'required|email',
    ],[
         'email.required' => 'Email needed',
    ]);

    # do some other checks and if there's some auth error:# 
    return response() -> json(['url' => '/login-bad',], 400); 
}

所以发生的事情是我总是得到200响应而不是400响应。

我应该将变量传递给postLogin吗?我应该将它发送给新功能吗?

BTW创建fatherAuth的原因是因为这个代码在几个控制器之间共享。

什么是最佳解决方案/最佳实践?

由于

1 个答案:

答案 0 :(得分:2)

您收到 @GeneratedValue(strategy = IDENTITY) ,因为您没有对200 response方法返回的响应做任何事情。

为了使它工作,你应该使用类似的东西:

fatherAuth

但是你认为它不是最好的方法。

这就是为什么你应该使用middleware的原因。例如:

function postLogin(Request $request){
   $response = $this->fatherAuth($request); 

   if ($response instanceof \Illuminate\Http\Response) {
       return $response;
   }

   return response() -> json(['url' => '/login-ok',], 200); 
}

然后您可以将此中间件应用于添加到<?php namespace App\Http\Middleware; use Closure; class CheckAuth { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { // here you do anything you want and assign to $result variable if (!$result) { return response() -> json(['url' => '/login-bad',], 400); } return $next($request); } } 文件中的$middleware数组的所有路由:

App/Http/Kernel.php

当然,如果需要,您只能将此中间件应用于选定的路线。

在您的App\Http\Middleware\CheckAuth::class, 方法之后,它只有:

postLogin