簡體   English   中英

Laravel驗證程序無法正常工作-重定向主頁

[英]Laravel Validator Not Working Properly - Redirecting main page

Laravel 5.5

public function register(Request $request){


    request()->validate([
        'email' => 'required:email'
        'password' => 'required|min:6'
    ]);

    return response()->json(["message" => "Hello World"]);

}

如果驗證器失敗,則不給出錯誤消息。 重定向主頁

如果驗證失敗時,您使用的代碼將您重定向到上一頁,則意味着您沒有告訴服務器您想要接收哪種響應。

設置適當的標頭以獲取JSON。 它將使驗證程序發送JSON作為響應。 例如:

$.ajax({
  headers: {
    Accept : "application/json"
  },
  ...
});

然后此代碼將按預期工作:

public function register(Request $request) 
{
    $request->validate([
        'email' => 'required:email'
        'password' => 'required|min:6'
    ]);

    return response()->json(["message" => "Hello World"]);
}

您可以這樣做:

$validator = Validator::make($request->all(), [
    'email' => 'required|email', //use pipe here to apply multiple validations rules and add a ','
    'password' => 'required|min:6'
]);

if ($validator->fails()) {
    return response()->json(['errors' => $validator->errors()]);
}
return response()->json(["message" => "Hello World"]);

驗證運行良好,但是$ request-> validate()會將您重定向到上一頁。 我建議您手動創建驗證: 手動創建驗證 您可以執行以下操作:

use Illuminate\Http\Request;
use Validator;
class YourClass extends Controller{
    public function yourFunction(Request $request){
        $validator = Validator::make($request->all(),[
            'field_1' => 'rule1|rule2',
            'field_2' => 'rule1|rule2'
        ]);

        if($validator->fails()){
            return response()->json($validator->errors());
        }else{
            /*Something else*/
        }
    }
}

在Postman應用程序中測試我的其余api時,我遇到了同樣的問題。

  1. 如果我們不想修改當前的laravel重定向休假代碼,則必須放入Accept:-application / json和ContentType:-application / json

在此處輸入圖片說明

  1. 為了修改控制器類文件中的代碼,我做到了這一點,並得到了json響應,而不是重定向到主頁。

      public function register(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:6', ]); if ($validator->fails()) { return response()->json($validator->errors()); }else{ //do something } } 

在它看起來像下面的代碼之前,它被重定向到主頁

這是驗證器功能

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6',
        ]);
    }
public function register(Request $request)
{

    // Here the request is validated. The validator method is located
    // inside the RegisterController, and makes sure the name, email
    // password and password_confirmation fields are required.
    $this->validator($request->all())->validate();

    // A Registered event is created and will trigger any relevant
    // observers, such as sending a confirmation email or any 
    // code that needs to be run as soon as the user is created.
    event(new Registered($user = $this->create($request->all())));

    // After the user is created, he's logged in.
    $this->guard()->login($user);

    // And finally this is the hook that we want. If there is no
    // registered() method or it returns null, redirect him to
    // some other URL. In our case, we just need to implement
    // that method to return the correct response.
    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath());
}

試試看,希望這段代碼可以為您提供幫助

$this->validate($request, [
        'email'    => 'required|email',
        'password' => 'required|min:6'
    ]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM