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の開発者です。 主にLAMPで開発しているWebエンジニアです(在宅)。大体10年程。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel5, CakePHP3, JavaScript, RoR 趣味:Elixir, Phoenix, Node, Nuxt, Express, Vue等色々

Crieitはβバージョンで開発中です。進捗は公式Twitterアカウントをフォローして確認してください。 興味がある方は是非記事の投稿もお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

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

関連記事

コメント