gitに記録しながらlaravel8.xプロジェクト作成の記録 (7)
の続き
- コントローラの作成
- 作成されたファイルを確認
- githubに反映
- ルーティングの作成
- コントローラにメソッド追加
- viewの追加(list.blade.php)
- viewの追加(edit.blade.php)
- viewの追加(confirm.blade.php)
- トップページにリンク追加
- githubに反映
- pullリクエスト作成
- pullリクエストを取り込む
- ブランチを削除する
- メインブランチ確認
- issueをクローズする
- visual Studio Codeのブランチをmainに戻してみる。
- git pull するとエラーになる
- リポジトリはこちら
コントローラの作成
make:controllerコマンドで、コントローラを作成します。
php artisan make:controller TaskController
結果、以下のようなメッセージがコンソールに出力されます。
Controller created successfully.
作成されたファイルを確認
以下のような空っぽのコントローラが作成されました。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TaskController extends Controller { // }
githubに反映
githubへの反映の流れは、(1)ステージング、(2)コミット、(3)プッシュ。この流れの操作は省略します。
画像は、githubに反映された様子。
ルーティングの作成
以下のルーティングを作成します。
method | ルーティング | コントローラクラス | メソッド | ルート名 |
---|---|---|---|---|
Get | /task/list | TaskController | list | task_list |
Get | /task/add | TaskController | add | task_add |
Get | /task/edit/{id} | TaskController | edit | task_edit |
Get | /task/delete/{id} | TaskController | confirm | task_confirm |
Post | /task/update | TaskController | update | task_update |
Post | /task/delete | TaskController | delete | task_delete |
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\TaskController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('top'); })->name('top'); //一覧表示 Route::get('/task/list', [TaskController::class, 'list'])->name("task_list"); //追加用フォーム Route::get('/task/add', [TaskController::class, 'add'])->name("task_add"); //編集用フォーム Route::get('/task/edit/{id}', [TaskController::class, 'edit'])->name("task_edit"); //削除確認用フォーム Route::get('/task/delete/{id}', [TaskController::class, 'confirm'])->name("task_confirm"); //更新処理 Route::post('/task/update', [TaskController::class, 'update'])->name("task_update"); //削除処理 Route::post('/task/delete', [TaskController::class, 'delete'])->name("task_delete");
コントローラにメソッド追加
ルーティングにマッチするクラスを作成 それぞれ処理を記述
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Task; class TaskController extends Controller { /** * 一覧表示 * * @param Request $request * @return void */ public function list(Request $request) { $tasks = Task::all(); return view("task.list", compact("tasks")); } /** * 新規作成用フォーム * * @param Request $request * @return void */ public function add(Request $request) { $task = new Task(); return view("task.edit", compact("task")); } /** * 更新用フォーム * * @param Request $request * @param [type] $id * @return void */ public function edit(Request $request, $id) { $id = decrypt($id); $task = Task::find($id); return view("task.edit", compact("task")); } /** * 追加処理・更新処理 * * @param Request $request * @return void */ public function update(Request $request) { $validatedData = $request->validate([ "name" => "required|min:3|max:100", ], [ "name.required" => "タスク名を入力してください。", "name.min" => "タスク名には3文字以上を入力してください。", "name.max" => "タスク名は100文字以内で入力してください。" ]); $id = $request->input("id"); $id = decrypt($id); $task = empty($id) ? new Task() : Task::find($id); $task->name = $validatedData["name"]; $task->save(); return redirect(route("task_list")); } /** * 削除確認画面 * * @param Request $request * @param [type] $id * @return void */ public function confirm(Request $request, $id) { $id = decrypt($id); $task = Task::find($id); return view("task.confirm", compact("task")); } /** * 削除処理 * * @param Request $request * @return void */ public function delete(Request $request) { $id = $request->input("id"); $id = decrypt($id); $task = Task::find($id); $task->delete(); return redirect(route("task_list")); } }
viewの追加(list.blade.php)
一覧表示用のビューを作成
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>タスク一覧</title> <style> table {border-collapse: collapse;} th,td {border: solid 1px;} th {background-color:lightgray;} </style> </head> <body> <div> <a href="{{route("top")}}">トップページ</a> </div> <div> <a href="{{route("task_add")}}">[新規作成]</a> </div> <table style="width:500px;"> <tr> <th style="width:50px;">id</th> <th>タスク名</th> <th style="width:100px;">操作</th> </tr> @if($tasks->isEmpty()) <tr> <td colspan="3">登録されていません。</td> </tr> @else @foreach($tasks as $task) <tr> <td style="text-align:center;">{{$task->id}}</td> <td style="text-align:left;">{{$task->name}}</td> <td style="text-align:center;"> <a href="{{route("task_edit", encrypt($task->id))}}">[編集]</a> <a href="{{route("task_confirm", encrypt($task->id))}}">[削除]</a> </td> </tr> @endforeach @endif </table> </body> </html>
viewの追加(edit.blade.php)
新規追加、編集用のビューを作成
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>{{ empty($task->id) ? "タスク追加": "タスク編集" }}</title> <style> table {border-collapse: collapse;} th,td {border: solid 1px;} th {background-color:lightgray;} </style> </head> <body> <div> <a href="{{route('task_list')}}">[戻る]</a> </div> <form action="{{route("task_update")}}" method="post"> @csrf <input type="hidden" name="id" value="{{old("id", encrypt($task->id ?? ""))}}" /> <table style="width:500px;"> <tr> <th style="width:100px;">タスク名</th> <td> <input type="text" name="name" value="{{old("name", $task->name)}}" style="width:98%;" /> </td> </tr> @error("name") <tr> <td colspan="2"> <span style="color:red;">{{$message}}</span> </td> </tr> @enderror </table> <p><input type="submit" value="登録" /></p> </form> </body> </html>
viewの追加(confirm.blade.php)
削除確認用のビューを作成
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>delete confirm Task</title> <style> table {border-collapse: collapse;} th,td {border: solid 1px;} th {background-color:lightgray;} </style> </head> <body> <div> <a href="{{route('task_list')}}">[戻る]</a> </div> <form action="{{route("task_delete")}}" method="post"> @csrf <input type="hidden" name="id" value="{{encrypt($task->id)}}" /> <table style="width:500px;"> <tr> <th style="width:100px;">タスク名</th> <td> {{$task->name}} </td> </tr> </table> <p><input type="submit" value="削除" /></p> </form> </body> </html>
トップページにリンク追加
トップページにタスク一覧のリンクを追加する
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>トップページ</title> </head> <body> <h1>トップページ</h1> <ul> <li><a href="{{route("top")}}">トップページ</a></li> <li><a href="{{route("task_list")}}">タスク一覧</a></li> </ul> </body> </html>
githubに反映
上記内容を(1) ステージング、(2)コミット、(3) プッシュの流れで、githubに反映
pullリクエスト作成
修正中のブランチを、mainブランチに取り込む準備
プルリクを作成した時に、issueの番号を含めると、issueにプルリクが紐づく
pullリクエストを取り込む
ブランチを削除する
メインブランチ確認
mainブランチのコミット数が増えていることを確認
ブランチのコミットの内容がそのまま、mainブランチのコミットとして取り込まれている。
issueをクローズする
visual Studio Codeのブランチをmainに戻してみる。
git pull するとエラーになる
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> main
エラーを解決する(ブランチを合わせる)
git branch --set-upstream-to=origin/main main
pullする。
git pull
以上で終了。