1. 程式人生 > 其它 >Laravel表單驗證類的手動啟用方式

Laravel表單驗證類的手動啟用方式

以下是一個標準的驗證類。

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ArticleRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
           'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ];
    }

    public function messages()
    {
        return [
            'title.required'    => '標題必填',
            'title.unique'      => '標題已存在',
            'title.max'         => '標題長度不能超過:max',
            ‘body.required’     => '內容必填',
        ];
    }
}

一般我們在控制器中可以以依賴注入的方式啟用它,例如:

    use App\Http\Requests\ArticleRequest;

    class ArticleController extends Controller
    {
        public function create(Request $request)
        {
            return view('article.create');
        }
        public function store(ArticleRequest $request)
        {
            //如進入到這裡說明引數驗證通過,可以繼續新增操作
            ...
        }
    }

當然,如果非要把新增的展示與儲存都寫在create方法中,通過判斷區分哪個操作,有什麼辦法呢?當然有,程式碼如下:

    class ArticleController extends Controller
    {
        public function create(Request $request)
        {
            if ($request->ajax() && $request->isMethod('POST')) {
                //新增儲存邏輯
                //手動啟用表單驗證類
                $validator = app('App\Http\Requests\ArticleRequest');
            }
            
            //新增展示頁面
            return view('article.create');
        }
    }

參考:https://github.com/laravel/framework/issues/7995#issuecomment-82269811