1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】MVCモデルという概念

Last updated at Posted at 2024-05-30

こんにちは、Reikaです。
私は現在、アプレンティスの5期生として日々勉強に励んでいます。

アプレンティスの課題としてLaravelの学習に取り組みました。
今回はこの経験を通じて学んだことについて、記述していきます。

簡単に自己紹介

  • 2023年12月〜独学でプログラミングの勉強を始める
  • 2024年4月〜内定直結型エンジニア学習プログラム「アプレンティス」に参加
  • 地方在住26歳社会人4年目。マインドミニマリスト。植物、テレビドラマ、コーヒーが好きです
  • 趣味でYouTube投稿をしています。現職やなぜエンジニアを目指すようになったのか?は以下の動画をぜひご覧ください!^^

目次

1.Laravelとは?
2.MVCモデルについて

1.Laravelとは?

まずは Laravelって何? というところからです。
Laravelは、ウェブ開発のための PHPフレームワークです。
簡単に言えば、ウェブサイトやウェブアプリケーションを作る際の お道具セット みたいなものです。

df436fdf79614aa4fe8cdcf9c93c4b9b_t.jpeg

例えば、ウェブサイトは複数のページで構成されていますよね?
最初にホームのページがあり、ログインするためにアドレスとパスワードを入力するページがあり、記事を作成するページがあり。
それぞれのページがどのURLに対応するかを決めるのが 「ルーティングシステム」(後に詳しく説明します) です。
Laravelでは、URLとページを結びつける作業を簡単に行うことができます。

また、ウェブサイトでは情報を保存するためにデータベースを使います。
Laravelでは、データベースを操作するのがとても簡単で、例えば、ユーザーが入力した情報を保存したり、表示するための方法がわかりやすく提供されています。

つまり、Laravelを使えば、ウェブサイトやウェブアプリケーションを作るための基本的な道具が揃っています!

2.MVCモデルについて

LaravelではMVCモデルを使って作られています。
MVCモデルとは、

M「Model(モデル)」
V「View(ビュー)」
C「Controller(コントローラ)」  をそれぞれ意味しています。
この3つに加えて ルーター を使って処理が実行されます。これを 「ルーティングシステム」 と言います。

a.png

(いらすとやさん、めちゃくちゃお世話になってます。)

Model(モデル)

モデルはデータベースとの連携を担当します。
データベースにデータを保存したり、データベースからデータを取得したりします。
Laravelでは、モデルは通常Eloquent ORMを使用して、簡単かつ直感的にデータベース操作を行います。

例:todosテーブルに入ったレコードを全て取得して、ビューに表示する

class TodoController extends Controller
{
    public function index()
    {
        // todosテーブルに入っているレコードを全て取得し、$todos変数に代入する
        $todos = Todo::all();

        // 取得したTODOをビューに渡して表示する
        return view('todos.index', ['todos' => $todos]);
    }

この例では、Todoモデルを使用してtodosテーブルの全てのレコードを取得しています。
取得したデータは$todos変数に格納され、その後ビューに渡されます。
ビューでは、このデータを使ってTODOリストを表示します。

View(ビュー)

ビューはユーザーが直接目にする部分で、ブラウザに表示される内容を担当します。
Laravelでは、ビューを Bladeというテンプレートエンジン を使って作成します。
そのため、ビューのファイル拡張子はすべて .blade.php となります。
テンプレートエンジンとは、通常のHTMLコードに 変数や制御構文 を埋め込むことができるものです。

例:TODOリストを表示するBladeテンプレート

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="{{ asset('css/todos.css') }}">
    <title>ToDo一覧</title>
</head>
<body>
<div class="container">
    <h1>Todo List</h1>

    <a class="new-task" href="/todos/new">タスクを追加する</a>

    <table>
        <thead>
            <tr>
                <th>タスク</th>
                <th>アクション</th>
            </tr>
        </thead>
        <tbody>
        @foreach($todos as $todo)
            <tr>
                <td>{{ $todo->title }}</td>
                <td>
                    <a class="edit" href="{{ route('todos.edit', $todo->id) }}">編集</a>
                    <a class="delete" href="#" onclick="return confirmDelete('{{ $todo->id }}')">削除</a>
                    <form id="delete-form-{{ $todo->id }}" action="{{ route('todos.destroy', $todo->id) }}" method="POST" style="display: none;">
                        @csrf
                        @method('DELETE')
                    </form>
                </td>
            </tr>
        @endforeach
        </tbody>
    </table>
</div>
<script>
    function confirmDelete(id) {
        if (confirm('本当に削除しますか?')) {
            document.getElementById('delete-form-' + id).submit();
        }
        return false;
    }
</script>
</body>
</html>

Controller(コントローラー)

コントローラーは、ルーターから受け取ったユーザーのリクエストを実際の処理に変換する役割を担います。
具体的には、モデルを介してデータベースとやり取りしたり、設定ファイルを読み込んだり、さまざまなコンポーネントと連携します。
最終的に、ユーザーのリクエストに応じた適切なレスポンスを返します。

例:新しいTODOタスクを作成するためのフォームを表示する

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

この例では、create メソッドが todos.create ビューを返しています。
つまり、このメソッドは新しいTODOタスクを作成するためのフォームを含むビューを表示します。

ルーター

最後に、ルーターは、ユーザーのリクエストをどのコントローラーのどのメソッドで処理するかを割り振る役割を担います。
具体的には、HTTPリクエスト(GET、POSTなど)とURLパターンを指定し、それに応じて適切なコントローラーメソッドを呼び出します。

ルート設定の書き方:

Route::HTTPメソッド('URL', [コントローラー::class, 'メソッド'])->name('ルート名');

例:新しいTODOタスクを作成するフォームを表示するためのルート

Route::get('/todos/create', [TodoController::class, 'create'])->name('todos.create');

  • Route::get は、GETリクエストに対するルートを定義します。
  • '/todos/create' は、ユーザーがアクセスするURLパスです。
  • [TodoController::class, 'create'] は、このリクエストを処理するコントローラーとメソッドを指定しています。この場合、TodoController の create メソッドが呼び出されます。
  • ->name('todos.create') は、このルートに名前を付けています。この名前は、ルートを参照するときに便利です。

まとめ

いかがでしたでしょうか?
Laravelは自転車に乗れるようになった人(PHPやMySQLに慣れた人)が電動自転車(Laravel)に乗れるようになるくらい、作業を効率化し、便利なものだと感じました。
最初は学ぶことが多いと感じるかもしれませんが、その奥深さゆえに学び甲斐があります。
私も日々新しい発見をしながら学習を進めています。

最後まで読んでいただき、ありがとうございました!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?