Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在移动应用程序的web服务上使用Laravel 5.4验证程序_Php_Json_Ajax_Laravel_Validation - Fatal编程技术网

Php 如何在移动应用程序的web服务上使用Laravel 5.4验证程序

Php 如何在移动应用程序的web服务上使用Laravel 5.4验证程序,php,json,ajax,laravel,validation,Php,Json,Ajax,Laravel,Validation,我对Laravel5.4验证程序有一个问题,我试图验证来自移动应用程序的数据,但当验证程序失败时,它会重定向到主页。我需要阻止此重定向并返回带有验证错误消息的json响应 下面是我的route.php代码 Route::group(['middleware' => 'web'], function() { Route::post('/userSignUp', [ 'uses' => 'UserController@userSignUp', 'as'

我对Laravel5.4验证程序有一个问题,我试图验证来自移动应用程序的数据,但当验证程序失败时,它会重定向到主页。我需要阻止此重定向并返回带有验证错误消息的json响应
下面是我的route.php代码

Route::group(['middleware' => 'web'], function() {
   Route::post('/userSignUp', [
       'uses' => 'UserController@userSignUp', 
       'as'   => 'userSingUp'
   ]);
});
这是我的控制器代码

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\MessageBag;

class UserController extends Controller
{

    public function userSignUp(Request $request){
        $fullName   = $request->input('fullName');
        $email      = $request->input('email');
        $phone      = $request->input('phone');
        $password   = $request->input('password');
        $userType   = $request->input('userType');
        $profilePic = $request->input('profilePic');


        $validator = $this->validate($request, [
                    'fullName' => 'required|max:255',
                    'email'    => 'required|email',
                    'phone'    => 'required'
                ]);

        if ($validator->fails()) {    
            return response()->json($validator->messages(), 200);
        }
    }
} 
所以有人能帮我解决这个问题吗?我需要在移动应用程序的web服务中使用laravel 5.4验证器,所以我需要防止验证器重定向,就像上面代码中的一样,当验证失败时,它会重定向到主页
提前谢谢

return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));
从官方文件

也许可以直接在模型中进行验证

class User extends Eloquent
{
   private $rules = array(
      'fullName' => 'required|max:255',
      'email'    => 'required|email',
      'phone'    => 'required|numeric'
   );


  public function validate($data)
  {
    // make a new validator object
    $v = Validator::make($data, $this->rules);
    // return the result
    return $v->passes();
  }
}
在你的控制器里,你可以

$new = Input::all();
$u = new User();
if ($b->validate($new))
{

}
else
{

}

如果在调用
$this->validate($request,$rules)时验证失败
laravel将引发异常,失败的验证响应将通过
lighted\Foundation\validation\validateRequests
中定义的方法发回:

/**
 * Create the response for when a request fails validation.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  array  $errors
 * @return \Symfony\Component\HttpFoundation\Response
 */
protected function buildFailedValidationResponse(Request $request, array $errors)
{
    if ($request->expectsJson()) {
        return new JsonResponse($errors, 422);
    }

    return redirect()->to($this->getRedirectUrl())
                    ->withInput($request->input())
                    ->withErrors($errors, $this->errorBag());
}

因此,Laravel似乎通过检查
$request->expectsJson()
来处理这个问题,因此您需要在JSON请求中指定
Accept
头,然后返回一个带有代码
422
的JSON格式响应。

我需要知道在哪里添加这个函数您不需要添加这个函数,这是laravel代码的一部分,我将向您展示如何处理失败的验证。您需要做的是在发送的请求中指定您想要JSON响应。通过设置
Accept
标题。如果您允许,我需要知道如何使用
If($validator->fails())
因为我正在尝试使用它,但代码在它之前停止并返回json响应,我需要使用它向响应添加属性我不太确定,由于所有错误消息都返回了,所以我不需要自定义响应,但我认为您必须自己进行验证,而不是在控制器中使用validate方法。我使用了validator类来自定义手动验证。您的意思是
$u->validate($new))
不是
$b->validate($new))
我尝试过这么做,但我在调用未定义的方法illumb\Database\Query\Builder::validate()时出错了是的,很抱歉$u,在控制器中调用未定义的方法illumb\Database\Query\Builder::validate(),在您的案例中添加模型的名称空间在顶部使用“App\User”