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');
    }

results matching ""

    No results matching ""