鍍金池/ 問(wèn)答/PHP/ laravel 的validate參數(shù),并使用auth自帶的注冊(cè)登錄功能

laravel 的validate參數(shù),并使用auth自帶的注冊(cè)登錄功能

題目描述

validate驗(yàn)證類(lèi),在不同的控制器下,為什么會(huì)產(chǎn)生不同效果,而且使用auth自帶登錄注冊(cè)功能
我的版本是laravel5.4

題目來(lái)源及自己的思路

相關(guān)代碼

// 請(qǐng)把代碼文本粘貼到下方(請(qǐng)勿用圖片代替代碼)
這是/app/Http/Controllers/Auth/LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;//這里必須引入request類(lèi)才能傳參數(shù)給重寫(xiě)的validateLogin函數(shù)

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;
    /**
     * Where to redirect users after login.
     * 登錄后重定向用戶的位置。
     * @var string
     */
   // protected $redirectTo = '/home';
    protected function redirectTo()
    {
        return  route('home') ;
    }

    /*
     * protected validateLogin方法
     * @param  \Illuminate\Http\Request  $request
     * 重寫(xiě)登錄驗(yàn)證
     */
    protected function validateLogin(Request $request)
    {
        $attributes = array(
            "required" => ":attribute 不能為空",
            "between" => ":attribute 長(zhǎng)度必須在 :min 和 :max 之間",
            "string"=>":attribute 必須字符串",
            "email"=>":attribute 已經(jīng)存在郵箱",
            "max"=>":attribute 最大值",
            "min"=>":attribute 最小值",
            "confirmed"=>":attribute 驗(yàn)證字段必須有一個(gè)匹配字段 foo_confirmation,例如,如果驗(yàn)證字段是 password,必須輸入一個(gè)與之匹配的password_confirmation 字段。",
            "unique"=>":attribute 已經(jīng)存在唯一郵箱"
        );

        $message= array(
            'email'=>'請(qǐng)輸入合法郵箱',
            'password'=>'請(qǐng)輸入密碼'
        );

        //validate使用對(duì)象的方法,傳入的必須是一個(gè)request對(duì)象
        $this->validate($request, [
            'email' => 'required|string|email|min:10', //這里不需要指定unique:users,插入才需要唯一,查詢不需要
            'password' => 'required|string',
        ],$attributes,$message);


    }

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //其中這個(gè)except表示logout這個(gè)方法將不會(huì)受到這個(gè)中間件的影響 logout通常是登出方法
        $this->middleware('guest')->except('logout');
    }

    public function showLoginForm()
    {
        return view("home.home_login");
    }

}

======================================
這是/app/Http/Controllers/Auth/RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * 重寫(xiě)前臺(tái)注冊(cè)方法,可以覆蓋use RedirectsUsers類(lèi)里面的方法
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        return view("home.home_register");
    }

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //這里中間件驗(yàn)證是否已經(jīng)登錄,在RedirectIfAuthenticated類(lèi)里面
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        $attributes = array(
            "required" => ":attribute 不能為空",
            "between" => ":attribute 長(zhǎng)度必須在 :min 和 :max 之間",
            "string"=>":attribute 必須字符串",
            "email"=>":attribute 已經(jīng)存在郵箱",
            "max"=>":attribute 最大值",
            "confirmed"=>":attribute 驗(yàn)證字段必須有一個(gè)匹配字段 foo_confirmation,例如,如果驗(yàn)證字段是 password,必須輸入一個(gè)與之匹配的password_confirmation 字段。",
            "unique"=>":attribute 已經(jīng)存在唯一郵箱"
        );

        $message= array(
            'name'=>'名字不能為空',
            'email'=>'請(qǐng)輸入合法郵箱',
            'password'=>'請(qǐng)輸入密碼'
        );


        $validator= Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users', //指定users表,這是在插入數(shù)據(jù)時(shí),檢查是否有唯一數(shù)據(jù),更新的時(shí)候不要用這個(gè)參數(shù)
            //unique:table,column,except,idColumn
            //驗(yàn)證字段在給定數(shù)據(jù)表上必須是唯一的,如果不指定column選項(xiàng),字段名將作為默認(rèn)column。
            'password' => 'required|string|min:6|confirmed',
           // confirmed驗(yàn)證此規(guī)則的值必須和 foo_confirmation 的值相同。比如,需要驗(yàn)證此規(guī)則的域是 password,那么在輸入中必須有一個(gè)與之相同的 password_confirmation 域。


        ],$attributes,$message);



        return $validator;
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

為什么login登錄頁(yè)面提示錯(cuò)誤,卻沒(méi)有顯示自定義錯(cuò)誤
為什么login登錄頁(yè)面提示錯(cuò)誤,卻沒(méi)有顯示自定義錯(cuò)誤

Register注冊(cè)頁(yè)面提示卻正常,請(qǐng)我究竟錯(cuò)在哪里了
Register注冊(cè)頁(yè)面提示卻正常,請(qǐng)我究竟錯(cuò)在哪里了

回答
編輯回答
疚幼
 $message= array(
            'email.required'=>'請(qǐng)輸入合法郵箱',
            'password.required'=>'請(qǐng)輸入密碼'
        );

應(yīng)該這樣寫(xiě)吧我記得。

2017年1月22日 17:31