這裏會介紹如何在 Laravel 5 驗證 HTTP 請求的資料
如果我們有文章(Article)的模型,我們在每次請求過程中想要驗證傳入的資料,我們可以使用系列指令建立要驗證的請求:
$ php artisan make:request CreateArticleRequest
請求驗證的檔案會被建立在 app\Http\Requests
目錄下,建立的檔案內容如下
<?php namespace App\Http\Requests;
// app\Http\Requests\CreateArticleRequest.php
use App\Http\Requests\Request;
class CreateArticleRequest extends Request {
/**
* Determine if the user is authorized to make this request.
* 驗證使用者是否要登入狀態
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
* 驗證請求的資料規則
*
* @return array
*/
public function rules()
{
return [
// 使用 | 設定驗證規則
'title' => 'required|min:3',
'body' => 'required|min:30',
// 使用陣列設定驗證規則
'published_at' => [
'required',
'date',
],
];
}
}
在驗證請求的 CreateArticleRequest 中的 rules() 函式,除了僅回傳驗證規則外,你也可以判斷不同的狀況去加入不同的規則再回傳,像是:
<?php namespace App\Http\Requests;
// app\Http\Requests\CreateArticleRequest.php
use App\Http\Requests\Request;
class CreateArticleRequest extends Request {
public function rules()
{
$rules = [
// 使用 | 設定驗證規則
'title' => 'required|min:3',
'body' => 'required|min:30',
// 使用陣列設定驗證規則
'published_at' => [
'required',
'date',
],
];
// 其他條件判斷
if ($condition) {
$rules['something_else'] = 'required';
}
return $rules;
}
}
在我們使用 Controller 去處理請求時,我們可以再傳入變數內設定要怎麼處理請求:
class ArticleController extends Controller {
// 新增文章
public function store(App\Http\Requests\CreateArticleRequest $request)
{
Article::create(Request:all());
// OR
// Article::create($request->all());
return redirect('articles');
}
}
這樣設定之後,所有的 HTTP 請求的 Input 資料都會經過 App\Http\Requests\CreateArticleRequest
驗證,如果有經過驗證才會繼續執行後面的新增文章動作,否則的話則會丟出驗證錯誤的物件到原頁面。
這裏要注意到,視圖(View)的每一頁 Laravel 都會將驗證錯誤物件(Illuminate\Support\ViewErrorBag)包成 $errors
變數,所以你可以在每一頁去印出 $errors
值,$errors
變數儲存的是任何資料驗證錯誤的結果
判斷是否有任何的錯誤並顯示錯誤訊息
// 任一 blade 視圖(View)皆可以接收此錯誤變數
@if($errors->any())
// 有錯誤訊息
<ul>
$foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
除了建立驗證 Request 物件,也可以直接使用 Controller 內建的 validate 去驗證請求
如果不想要使用內建處理 HttpResponseException 的例外,你也可以自己 try catch 並自己處理例外狀況
class ArticleController extends Controller {
// 新增文章
public function store(Requests $request)
{
try {
$this->validate($request, [
'title' => 'required|min:3',
'body' => 'required|min:30',
'published_at' => 'required|date',
]);
} catch (Exception $e) {
// 自己處理例外狀況
}
Article::create(Request:all());
// OR
// Article::create($request->all());
return redirect('articles');
}
}
取得 User Agent、Referrer
<?php
// User Agent
request()->server('HTTP_USER_AGENT');
// Referrer
request()->server('HTTP_REFERER')
!INCLUDE “../../kejyun/book/laravel-5-for-beginner.md”
KeJyun 最新新書推薦
- Laravel 5 for beginner 新手道場:優雅運用框架快速開發 PHP 網站
- Laravel框架开发详解:从零基础到运用框架快速开发PHP网站
Laravel 是 PHP 的框架(Framework),提供了很多開發網站或 API 所需的工具及環境,經過簡單的設定就可以完成資料的處理及顯示,使開發者可以很優雅且快速的開發出各個不同的產品。本書適合有 PHP 基礎的人,但不知道要怎麼選擇框架,或者不用框架的人也能夠明白它的好處。 雖然 WordPress 也能夠架站,但如果有客製化需求,要開發各式各樣的網站,或提供 App 使用的 API,如此一來你只能選擇用框架,而 Laravel 是目前最受歡迎的。 本書將解說為什麼要使用框架,以及理解框架的優缺點後,要怎麼選擇框架,並用框架快速建構一個網站。除非必要,否則書中會避免專業技術用語,盡量使用最生活化易懂的例子及語氣,讓大家更容易進入 Laravel 的世界。 |
|
購書連結 |
|
購書連結 |