前に書いたやつの続きです。備忘録であります。
1 新規投稿、保存
(フォームに記事を投稿できなければ、意味は)ないです。よね。そこで新規投稿機能の作製を行いましょう。初めに、新規投稿なので...
contolloer/articleのcreateに記載
public function create(Request $request)
{
$message = 'New data';
return view('new', ['message' => $message]);
}
と記載を行います。ここでは一旦受け取るデータをダミーの'new data';としておきます。
新規投稿画面が欲しいのでreworses/new.blade.phpに
<h1>paiza bbs</h1>
<p>{{ $message }}</p>
{{ Form::open(['route' => 'article.store']) }}
<div class='form-group'>
{{ Form::label('content', 'Content:') }}
{{ Form::text('content', null) }}
</div>
<div class='form-group'>
{{ Form::label('user_name', 'Name:') }}
{{ Form::text('user_name', null) }}
</div>
<div class="form-group">
{{ Form::submit('作成する', ['class' => 'btn btn-primary']) }}
<a href={{ route('article.list') }}>一覧に戻る</a>
</div>
{{ Form::close() }}
と記載します
これでは固定テキストしか表示されません。やっぱ自分で書いたやつ、欲しいですよね。
contolloerに
Route::post('/arcile', 'ArticleController@store')->name('article.store');
と追加します。これで
{{ Form::open(['route' => 'article.store']) }}
にルーティングが設定されました。ではArticleController のstoreを書いていきましょう。
htttp/Contolloer/Arcicleclonntollortに
public function store(Request $request)
{
$article = new Article;
$article->content = $request->content;
$article->user_name = $request ->user_name;
$article->save();
return redirect()->route('article.show', ['id' => $article->id]);
}
と記入します。returnのreturn redirect()->route....は
同じくhttp/contolloer/Articlecontolloerにある
http/contolloer/Articlecontolloer
public function show(Request $request, $id, Article $article)
{
$message = 'This is your article ' . $id;
$article = Article::find($id);
return view('show', ['message' => $message, 'article' => $article]);
}
を呼び出すってわけですね。ここで両者のコントローラーを見てみましょう。
routes/web.phpより、
Route::post('/arcile', 'ArticleController@store')->name('article.store');
Route::get('/article/{id}', 'ArticleController@show')->name('article.show');
両者ともに最終的にはview のshow に偏移しますが、前者の@Stoerはnameを受け取るほんの少しの遠回りをしったってことです。
次に編集フォームを編集していきます。
resources/views/show.blade.php
<h1>paiza bbs</h1>
<p>{{ $message }}</p>
<p>{{ $article->content }}</p>
<p>{{ $article->user_name }}</p>
<p>
<a href={{ route('article.list') }} class='btn btn-outline-primary'>一覧に戻る</a>
<a href={{ route('article.edit', ["id" => $article->id]) }} class='btn btn-outline-primary'>編集</a>
</p>
<div>
{{ Form::open(['method' => 'delete', 'route' => ['article.delete', $article->id]]) }}
{{ Form::submit('削除', ['class' => 'btn btn-outline-secondary']) }}
{{ Form::close() }}
</div>
投稿したら、投稿した奴だけを移したいので(XXXXが投稿されました。としたい)
public function edit(Request $request, $id, Article $article)
{
$message = 'Edit your article ' . $id;
$article = Article::find($id);
return view('edit', ['message' => $message, 'article' => $article]);
}
と記入。vieweditとする事で、それ専用のページを作ります
//以下view/edit
<h1>paiza bbs</h1>
<p>{{ $message }}</p>
{{ Form::model($article, ['route' => ['article.update', $article->id]]) }}
<div class='form-group'>
{{ Form::label('content', 'Content:') }}
{{ Form::text('content', null) }}
</div>
<div class='form-group'>
{{ Form::label('user_name', 'Name:') }}
{{ Form::text('user_name', null) }}
</div>
<div class="form-group">
{{ Form::submit('保存する', ['class' => 'btn btn-primary']) }}
<a href={{ route('article.show', ['id' => $article->id]) }}>戻る</a>
</div>
{{ Form::close() }}
これでよかです。やったぜ。