第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【抜粋】
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【抜粋】
こちらも本来はここでデータの検索をしますが、今回はデータを固定にしています。
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【抜粋】
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>