2016-06-10 86 views
0

我想用ajax做一個註冊,用laravel驗證數據。 我意識到發送,但不知道如何返回驗證錯誤,並接收js代碼中的錯誤,並在div中顯示錯誤。響應ajax和laravel的驗證響應

我正在使用版本5.2的laravel。感謝幫助:)

JS:

function send(event){ 

    event.preventDefault(); 

    $.ajax({ 


     type: 'post', 
     url: "{{route('NewUser')}}", 
     dataType: 'json', 
     data: { 
      name: $('#name').val(), 
      email: $('#email').val(), 
      password: $('#password').val(), 
      cpassword: $('#cpassword').val(), 
      _token: $('#new-user').attr('data-token') 
     }, 
     success: function(errors){ 

      $('#Register').modal('hide'); 

     }, 
     error: function(errors) { 


     } 

    }); 

} 

laravel控制器:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Validator; 
use App\Http\Controllers\Controller; 
use App\Http\Requests; 

class UserController extends Controller 
{ 
    public function index() 
    { 
     return view('home'); 
    } 
    public function NewUser(Request $request) 
    { 

     $this->validate($request,[ 
       'name' => 'required|max:255', 
       'email' => 'required|email|max:255|unique:users', 
       'password' => 'required|min:8|same:cpassword', 
       'cpassword'=> 'required|min:8' 
      ]); 

      CreateNewUSer($request); 

    } 

    Protected function CreateNewUser(Request $request){ 

    } 

回答

1

爲了達到自己的目標,我建議你使用FormRequest
首先創建表單請求類

php artisan make:request UserRequest 

然後在UserRequest

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 
public function rules() 
{ 
    return [ 
     'name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:8|same:cpassword', 
     'cpassword'=> 'required|min:8', 
    ]; 
} 

rules方法添加一些規則,爲簡單起見所有用戶可以提出此請求(您應該查看文檔,如果您希望以這種方式檢查用戶權限)

在您的控制器

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Validator; 
use App\Http\Controllers\Controller; 
use App\Http\Requests; 

use App\Http\Requests\UserRequest; 

class UserController extends Controller 
{ 
    public function index() 
    { 
     return view('home'); 
    } 
    public function NewUser(UserRequest $request) 
    { 
      // laravel will validate request itself automatically and 
      // will go on if validate pass or will return back with 
      // status code 422, input and errors otherwise 

      CreateNewUSer($request); 

    } 

    Protected function CreateNewUser(Request $request){ 

    } 

最後,你可以使用jQuery的Ajax .error()

function send(event){ 

    event.preventDefault(); 

    $.ajax({ 


     type: 'post', 
     url: "{{route('NewUser')}}", 
     dataType: 'json', 
     data: { 
      name: $('#name').val(), 
      email: $('#email').val(), 
      password: $('#password').val(), 
      cpassword: $('#cpassword').val(), 
      _token: $('#new-user').attr('data-token') 
     }, 
     success: function(errors){ 

      $('#Register').modal('hide'); 

     }, 
     error: function(errors) { 

      //handle errors here 

     } 

    }); 

} 

編輯 把這個觀點JS之前使用Ajax功能

趕在你的js腳本錯誤
/** 
* Determine if the user is authorized to make this request. 
* 
* @return bool 
*/ 
public function authorize() 
{ 
    return true; 
} 

進一步

<script> 
    var userAjax = "{{ route('NewUser') }}"; 
</script> 

和你的阿賈克斯js

$.ajax({ 

     type: 'post', 
     url: userAjax, 
     dataType: 'json', 
     // ... 
+0

你好,很抱歉有這麼多問題,不是不想閱讀文檔,但我的英語說得不好。 我實現了你的建議,我使用了代碼,就像你給我看的那樣,但代碼不起作用,我總是執行錯誤的函數: –

+0

什麼請求返回? 'console.log(錯誤)' – huuuk

+0

錯誤:函數(錯誤){ alert(console.log(errors)); } show undefined –

0
$objValidator = Validator::make(Input::all(), array(
     'name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:8|same:cpassword', 
     'cpassword'=> 'required|min:8' 
    ),array(
     'required'=>'Required', 
     'email'=>'Invalid email', 
     'unique' => 'exists' 
    )); 
    if($objValidator->fails()) 
    { 
     return $objValidator->errors(); 
    } 

獲取數組中的JS代碼,也比使用$。每個功能 可以顯示錯誤。 對於您已設置exmple,一個DIV下方的輸入框中 HTML:

<div id="email_error" class="error" style="display:none">Email Already Exits.</div> 

$.each(data, function (key,val) { 
    $("#"+key+'_error').show(); 
}); 
+0

你可以更具體一點在js的部分?非常感謝:) –

0

您的驗證錯誤將返回爲JSON這樣你就可以做錯誤類似

$.ajax({ 
    type: 'post', 
    url: url, 
    data: data, 
    dataType: 'json', 
    success: function(data){ 
    // success logic 
    }), 
    error: function(data){ 
    var errors = data.responseJSON; 
    console.log(errors); 
    // Render the errors with js ... 
    } 
}); 

所以你會得到所有來自驗證的錯誤。

+0

錯誤是自動發送的代碼我有驗證?? –

+0

是@RecoJhonatan –

+0

當驗證它確定,ejecute錯誤函數,並且當驗證它失敗時,太ejecute錯誤函數。永遠不要預見成功功能 –