2018-12-11に更新

LaravelのControllerの薄いメソッドでも書く

はじめに

この記事はQiitaの Laravel Advent Calendar 2018 の11日目です。

概要

何を書こうか迷いましたが、Laravelの大体のことは世の中書きつくされていて書くことが無さそうだったので、LaravelでResource形式のControllerの各メソッドについて、それぞれどれだけ薄くできるか書いてみることにしました。(動作確認はしてないので動かなかったらごめんなさい)

index

一覧ページの処理です。

    public function index()
    {
        $posts = Post::paginate();
        return view('post.index', compact('posts'));
    }

create

新規登録フォームのページです。編集ページとformのテンプレートを使い回す場合はnewしただけのデータを渡しておいた方が良いかもしれません。

    public function create()
    {
        return view('post.create');
    }

store

新規登録フォームからPOSTして登録を実行する処理です。モデルの方でfillableguardedは設定しておきましょう。

    public function store(Request $request)
    {
        $post = new Post($request->all());
        $post->save();
        return redirect('posts');
    }

show

データの詳細ページです。

    public function show(Post $post)
    {
        return view('post.show', compact('post'));
    }

edit

編集フォームを表示するページです。ユーザーが自分のデータを編集する場合なら所有者チェックも必要ですね。

    public function edit(Post $post)
    {
        return view('post.edit', compact('post'));
    }

update

編集フォームからPOST(PUT)されて更新するページです。バリデーションが必要な場合はRequestを専用のものに置き換えましょう。

    public function update(Request $request, Post $post)
    {
        $post->fill($request->all());
        $post->save();
        return redirect("posts/{$post->id}");
    }

destroy

削除処理です。

    public function destroy(Post $post)
    {
        $post->delete();
        return redirect('posts');
    }

まとめ

こんな感じで、薄い場合はとにかく薄くできるので面白いです。DIを利用することでテストもめちゃくちゃ楽ですし、Laravelはやはりフレームワークとしてなかなか良くできていると思います。

おまけ

メソッドはともかくあまりにも記事自体も薄いので、Laravelで開発している個人サービス(当サービス)の普段の運用方法を最近まとめたのでリンクでもしておきます。

Crieitの普段の運用方法について色々

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント