Validation
驗證測試
- 利用 Laravel 5 新增的 FormRequest 來做驗證
- 驗證錯誤訊息與是否有正確保留舊輸入
- 是否有導回前一頁 (表單頁)
模擬沒有填值即送出表單:
public function testCreateArticleFails()
{
Session::start();
$this->call('POST', 'articles', [
'_token' => csrf_token(),
]);
$this->assertHasOldInput();
$this->assertSessionHasErrors();
// 應該會導回前一個 URL
$this->assertResponseStatus(302);
}
可以在 store
方法中用 $this->validate
來做驗證:
$this->validate($request, [
'title' => 'required|min:3',
'body' => 'required',
]);
也可以用 Form Request 。
- Form Request 可以被 reuse 。
- Form Request 可以寫入較複雜的邏輯。
新增 ArticleRequest
:
$ php artisan make:request ArticleRequest
編輯:
namespace App\Http\Requests;
class ArticleRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// 可以在這裡對身份做驗證,避免編輯到別人的資料
// 暫時先回傳 true
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
// 新增驗證規則
return [
'title' => 'required|min:3',
'body' => 'required',
];
}
}
用 ArticleRequest
取代 Http\Request
:
// 記得修正 import
use App\Http\Requests\ArticleRequest;
use App\Repositories\ArticleRepository;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Redirect;
class ArticleController extends Controller {
/**
* Store a newly created resource in storage.
*
* @param ArticleRequest $request
* @return Response
*/
public function store(ArticleRequest $request)
{
// Request 改成 ArticleRequest
// 以下的程式碼不變
$this->repository->create($request->all());
return Redirect::route('articles.index');
}