じろう

2019年11月02日に参加

学習履歴詳細

[Laravel]課題アプリ作成。バリデーションでbailを使ってみる。ページネーション実装。写真の加工・投稿処理がstoreとuploadで重複してるので、リポジトリ作って切り出してみる。

今日のYWT

やったこと

Travelog

バリデーション

ページネーション

Fat Controllerの解消を目指す

VSCode拡張や設定

わかったこと

カスタムバリデーション

bail、てっきり一つ引っかかったらそのあとの他のカラムに対するバリデーションルールも飛ばしてしまうのかと思った。
|を使って一つのカラムに複数のルールを設定しているとき、どこかのルールに引っかかったらそのカラムの残りのバリデーションルールの判定を停止する。

// 画像ファイル
'files.*.photo' => 'bail|image|mimes:jpeg,bmp,png',

こう書けば、imageのルールに引っかかったらmimesはチェックしない。

コレクションでページネーション

コレクションに対して、直接paginateは効かない。
ので、やり方を調べた。

Laravelで独自のページネーターを作成する
Laravel pagenationリンクのhttps化
Laravel 5.7 データベース:ペジネーション

forPageでコレクションでもページネーションができるようになる!

public function index(Request $request)
{
    $articles = Article::all()->sortByDesc('created_at')
        ->load([
            'user',
            'likes',
            'tags',
            'photos'
        ]);

    // ページネーション用
    $articlePaginate = new LengthAwarePaginator(

        // forPageでコレクションでもページネーションできる
        $articles->forPage($request->page, 5),
        $articles->count(),
        5,
        null,
        ['path' => $request->url()]
    );

ページネーションでもHTTPS通信を可能にする

AppServiceProvider.phpに、以下の記述を追加。

public function boot()
{
    if($this->app->environment('production')) {
        \URL::forceScheme('https');

        // ページネーションのURLもhttpsに対応させる
        $this->app['request']->server->set('HTTPS','on');
    }
}

リポジトリパターン

コントローラの処理をリポジトリに移して、コントローラを見た時にEloquentのやりとりがないように・考えなくてもいいようにする
そうしないとテストがまともに書けないから。
コーディングしてからテストだと人間は都合の良いテストを書く。だからテスト駆動開発が生まれた。しかしテスト駆動開発は人間には早すぎるって言ってた。

次やること

ArticleControllerの処理をリポジトリに切り出してみる!

Laravel

2020年11月18日(水)

5.1時間