こちらのページの続きです。
Laravel で MariaDB の CRUD (その 3)
新規作成機能を作ります。
- ルーティングを確認 >articles/create があることを確認
- 一覧ページに新規作成のリンクをつけます。
- ビューの作成
- コントローラーの修正
- サーバーを起動してブラウザーで確認
php artisan route:list
resources/views/articles/index.blade.php
{{-- layoutsフォルダのapplication.blade.phpを継承 --}}
@extends('layouts.application')
{{-- @yield('title')にテンプレートごとにtitleタグの値を代入 --}}
@section('title', '記事一覧')
{{-- application.blade.phpの@yield('content')に以下のレイアウトを代入 --}}
@section('content')
<div>
<a href="/articles/create">新規作成</a>
</div>
<table>
@foreach ($articles as $article)
<tr>
<td>{{$article->title}}</td>
<td>{{$article->body}}</td>
<td><a href="/articles/{{$article->id}}">詳細を表示</a></td>
</tr>
@endforeach
</table>
@endsection
resources/views/articles/create.blade.php
{{-- layoutsフォルダのapplication.blade.phpを継承 --}}
@extends('layouts.application')
{{-- @yield('title')にテンプレートごとの値を代入 --}}
@section('title', '新規作成')
{{-- application.blade.phpの@yield('content')に以下のレイアウトを代入 --}}
@section('content')
<form action="/articles" method="post">
{{-- 以下を入れないとエラーになる --}}
{{ csrf_field() }}
<div>
<label for="title">タイトル</label>
<input type="text" name="title" placeholder="記事のタイトルを入れる">
</div>
<div>
<label for="body">内容</label>
<textarea name="body" rows="8" cols="80" placeholder="記事の内容を入れる"></textarea>
</div>
<input type="submit" value="送信">
</div>
</form>
@endsection
app/Http/Controllers/ArticlesController.php
// 略
public function create()
{
return view('articles.create');
}
// 略
public function store(Request $request)
{
// モデルからインスタンスを生成
$article = new Article;
// $requestにformからのデータが格納されているので、以下のようにそれぞれ代入する
$article->title = $request->title;
$article->body = $request->body;
// 保存
$article->save();
// 保存後 一覧ページへリダイレクト
return redirect('/articles');
}
// 略
php artisan serve