2019.10.04

0から始めるLaravel vol.03 〜ToDoリスト詳細・編集編〜

  • laravel
0から始めるLaravel vol.03 〜ToDoリスト詳細・編集編〜

前回からの続きです。

0から始めるLaravel vol.02 〜ToDoリスト作成編〜

今回は詳細と編集ができるようにします。

まずは詳細を見れるようにするところから。一番下の行を追加します。

[php]
web.php

Route::get('/task/{id}', 'TaskController@show');
[/php]

コントローラにshowを追加します。

[php]
app/Http/Controllers/TaskController.php

public function show($id)
{
$task = Task::findOrFail($id);
return view('tasks.show', compact('task'));
}
[/php]

showを表示するためのビューを作成します。

[php]
view/tasks/show.blade.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>My Task show</title>
</head>
<body>

<h1>Tasks</h1>

<hr>

{{ $task->body }}

<span>{{ $task->created_at->format('Y-m-d H:i') }}</span>

</body>
</html>
[/php]

indexもshowへ行くためのaタグを追加します。

[php]
view/tasks/index.blade.php

<ul>
@foreach($tasks as $task)

<li>

<a href="{{ url('/task/'.$task->id) }}">{{ $task->body }}</a>

<form action="{{ 'task/'.$task->id }}" method="POST">
{{ csrf_field() }}
{{ method_field('DELETE') }}
<button type="submit">Delete</button>
</form>

</li>

@endforeach
</ul>

[/php]

こんな感じの詳細が出てくれば完璧です。

 

次は作ったタスクを編集する機能をつけます。

まずはルートを追加して

[php]
web.php

Route::get('/task/{id}/edit', 'TaskController@edit');
Route::post('/task/{id}', 'TaskController@update');
[/php]

コントローラにeditとupdateを追記します。

[php]
app/Http/Controllers/TaskController.php

public function edit($id)
{
$task = Task::findOrFail($id);
return view('tasks.edit', compact('task'));
}
public function update(Request $request, $id)
{
$task = Task::find($request->id);
$task->body = $request->body;
$task->save();
return redirect('/');
}
[/php]

show.blade.phpに編集するためのフォームを記述します。

[php]

<form action="{{ url('/task/'.$task->id) }}" method="POST">
{{ csrf_field() }}
<input type="text" name="body" value="{{ $task->body }}">
<button type="submit">update</button>
</form>

[/php]

詳細ページを見ると

こんな感じで自分が追加したタスクを編集することができるようになりました。

これでCRUD
・Create(作成)
・Read(読み取り)
・Update(更新・編集)
・Delete(削除)
を実装することができましたね。

これを応用することで色々な機能を実装することができます。

多対多リレーションなどについて書いていきたい。
けどちょっと自分でも完璧に理解していないので不安ですが頑張ります。