第25回 Laravelでコントローラーを使って画面遷移

公開日:2021-03-31 更新日:2021-03-31

1. 概要

Laravelでコントローラーを使って画面遷移の方法について説明しています。

2. 動画



3. コントローラーの作成

コマンドプロンプトで Laravel のプロジェクトをカレントディレクトリにして、次のコマンドを実行すると、コントローラーが作成されます。
php artisan make:controller ArticleController --resource
コントローラーは、app/Http/Controllers 配下に作成されます。

4. ルーティングの設定

routes/web.php に以下を追加すると、--resource をつけて作成したコントローラの各メソッドに、一括でルーティングの設定が行われます。
Route::resource('articles', 'App\Http\Controllers\ArticleController');

ルーティングは、次のコマンドで確認できます。
php artisan route:list

5. コントローラーの index() の作成

本来は一覧表示用のデータを検索しますが、今回は固定のデータを作成して、view に渡しています。

app/Http/Controllers/ArticleController.php【抜粋】
public function index()
{
    $articles = [
        ['id' => 1, 'title' => 'title1', 'data' => 'data1'],
        ['id' => 2, 'title' => 'title2', 'data' => 'data2'],
        ['id' => 3, 'title' => 'title3', 'data' => 'data3'],
    ];
    return view("article.index", ['articles' => $articles]);
}

6. ビューの index.php の作成

resources/views/article/index.blade.php【抜粋】
<ul>
    @foreach ($articles as $article)
      <li><a href="{{ route('articles.show',[ $article['id'] ]) }}">{{ $article['title'] }}</a></li>
    @endforeach
</ul>

7. コントローラーの show() の作成

詳細表示用のメソッドです。
こちらも本来はここでデータの検索をしますが、今回はデータを固定にしています。

app/Http/Controllers/ArticleController.php【抜粋】
public function show($id)
{
    return view("article.show", [
        'id'    => $id,
        'title' => 'タイトル',
        'data'  => 'こんにちは'
    ]);
}

8. ビューの show.php の作成

resources/views/article/index.blade.php【抜粋】
{{ $id }}<br />
{{ $data }}<br />

9. ビューの index.php の修正

resources/views/article/index.blade.php【抜粋】

一覧画面に追加ボタンを追加します。
<a class="btn btn-info text-white" href="{{ route('articles.create') }}">追加</a>

10. コントローラーの create() の作成

app/Http/Controllers/ArticleController.php【抜粋】
public function create()
{
    return view("article.create", []);
}

11. ビューの create.blade.php の作成

resources/views/layouts/create.blade.php【抜粋】
<form action="{{ route('articles.store') }}" method="post">
    @csrf
    
    <input type="text" name="article[title]" /><br /><br />
    <input type="text" name="article[data]"  /><br />
    <br />
    <input type="submit" class="btn btn-info text-white" value="登録" />
    <a class="btn btn-info text-white ml-5" href="{{ route('articles.index') }}">一覧に戻る</a>
</form>

12. コントローラーの store() の作成

app/Http/Controllers/ArticleController.php【抜粋】
public function store(Request $request)
{
    $article = $request->input('article');
    var_dump($article);
    
    return redirect()->route('articles.index')->with('message', '作成しました。');
}

13. フラッシュメッセージの表示

フラッシュメッセージ(完了メッセージやエラーメッセージ)は、共通で使うため、レイアウトの方に追加します。

resources/views/layouts/app.blade.php【抜粋】
  <main class="py-4">
      @if (session('message'))
          <div class="alert alert-info">{{ session('message') }}</div>
      @endif
      
      @yield('content')
  </main>