- 投稿日:2021-09-01T22:29:38+09:00
【Laravel】ページネーションの実装方法
はじめに 今回は簡単にできるページネーションの実装方法について説明します。 ページネーションとは たとえば、1ページに投稿を100件も表示すると、ユーザーも見づらいし、表示速度も落ちるし、システムの負荷も増えてしまいますね。 そこで、そのような長いコンテンツを複数のページに分けて表示させることをページネーションといいます。 ページネーションの実装 1) コントローラーに以下のように記述します。 MenuController.php public function index() { $menus = Menu::paginate(5); return view('menus.index', ['menus' => $menus]); } paginateの引数に渡されている数字が1ページに表示する件数です。 2) テンプレートファイルに以下のように記述します。 index.blade.php {{ $menus->links() }} おわりに これだけでページネーションを実装できるなんてびっくりですね。 ページネーションをカスタマイズすることもできるので、カスタマイズしたい人はググってみてください。
- 投稿日:2021-09-01T21:44:02+09:00
【Laravel】入力フォームの値の複合バリデーション
やりたいこと Laravel で 生年月日が 年、月、日でバラバラにPOSTされるケース。 以下のように、単純にバリデーションすると 日付として成立しているかの検証ができない。 年、月、日 を 合わせて、日付として成立しているか評価したい! example // リクエスト例 request()->birthday_year; request()->birthday_month; request()->birthday_day; // それぞれバリデーションする場合 'birthday_year' => 'required|integer|date_format:Y', 'birthday_month' => 'required|between:1,12', 'birthday_day' => 'required|between:1,31', 方法 withValidator() を使うと、通常のバリデーションルールを通過したあとに、柔軟にルール追加ができた。 $this->input('birthday_xxx') のように項目ごとに入力内容が取得できるので、checkdate() で 日付として成立しているか評価する。 $validator->errors()->add($key, $message) で、 特定のキーに対して、エラーメッセージを追加することが可能 BirthdayRequest.php <?php namespace App\Http\Requests; use App\Http\Requests\Request; class BirthdayRequest extends Request { protected $rules = [ 'birthday_year' => 'required|integer|date_format:Y', 'birthday_month' => 'required|between:1,12', 'birthday_day' => 'required|between:1,31', ]; protected function withValidator($validator): void { $validator->after(function ($validator) { if (!checkdate($this->input('birthday_month'), $this->input('birthday_day'), $this->input('birthday_year'))) { $validator->errors()->add('birthday_day', '正しい日付を入力してください'); } }); } } あとがき 詳しくは... https://readouble.com/laravel/8.x/ja/validation.html フォームリクエストへのAfterフックを追加 withValidator() 使わなくても、デフォルトのバリデーションルールだけで、できると嬉しいな。(パット見なさそう?) Laravel5.5 あたりから、 withValidator() ありそうです。