Php 如何在移动应用程序的web服务上使用Laravel 5.4验证程序
我对Laravel5.4验证程序有一个问题,我试图验证来自移动应用程序的数据,但当验证程序失败时,它会重定向到主页。我需要阻止此重定向并返回带有验证错误消息的json响应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'
下面是我的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”