【Laravel】同じURLに別のpost処理をルーティングしたい（Todoリスト作成）

# やりたいこと
下記を同時に行いたい

- 指定したIDカラムのステータスの更新
- 指定したIDカラムの削除
[完成イメージ](https://gyazo.com/dc27f1b068dde34e8a79b326af2c512d)

### 発生している問題
以下のことから削除処理が優先して行われてしまう

- 削除処理も更新処理もidを渡して行っている
- 同じ画面にリダイレクトさせている


### 該当のソースコード

web.php

```php

<?php

/*
|--------------------------------------------------------------------------
| 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('welcome');
});



Route::get('/login', 'LoginController@index');

Route::get('/register', 'RegisterController@index'); 
Route::post('/register', 'RegisterController@post');

Route::get('todos','TodosController@index');
Route::post('todos','TodosController@store');
Route::post('/todos/{id}','TodosController@update');
Route::post('/todos/{id}','TodosController@remove');

```

index.blade.php

```php
@extends('layouts.parents')

@section('title', 'Todoリスト')

@section('content')
  @if(count($errors) > 0)
    <div>
      <ul>
        @foreach($errors->all() as $error)
          <li>{{ $error }}</li>
        @endforeach
      </ul>
    </div>
   @endif
<h1>Todoリスト</h1>
  <label><input type="radio" checked>すべて</label>
  <label><input type="radio">作業中</label>
  <label><input type="radio">完了</label>
    <table>
      <tr>
        <th>ID</th>
        <th>コメント</th>
        <th>状態</th>
      </tr>
      @foreach($todos as $todo)
        <tr>
        <!-- findで検索されたIDを取得 -->
          <input type="hidden" name="id" value="{{$todo->id}}">
          <td>{{$loop->iteration}}</td>
          <td>{{$todo->comment}}</td>
          @if($todo->state > 0)
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @csrf
            <!-- 作業中ボタン -->
            <td><input type="submit" value="作業中"></td>
            <input type="hidden" name="state" value="0">
          </form>
          @else
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @csrf
            <!-- 完了ボタン -->
            <td><input type="submit" value="完了"></td>
            <input type="hidden" name="state" value="1">
          </form>
          @endif
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @csrf
            <!-- 削除ボタン -->
            <td><button type="submit">削除</button></td>
          </form>
        </tr>
      @endforeach
    </table>
<h1>新規タスクの追加</h1>
<form action="todos" method="POST">
  @csrf
    <input type="text" name="comment" value="{{old('comment')}}">
    <!-- 追加ボタン -->
    <input type="submit" value="追加">
</form>
@endsection

```
TodosController.php

```php
<?php

namespace App\Http\Controllers;

use App\Todo;
use Illuminate\Http\Request;
use App\Http\Requests\TodoRequest;

class TodosController extends Controller
{
    //DBにあるレコードを表示する
    public function index(Request $request)
    {
        $todos =Todo::all();
        return view('todos.index', ['todos' => $todos]);
    }

    //レコードを追加する
    public function store(TodoRequest $request)
    {
        // $this->validate($request, Todo::$rules);
        $todo = new Todo;
        $form = $request->all();
        unset($form['_token']);
        $todo->fill($form)->save();
        return redirect('todos');
    }

    //state変換
    // public function edit(Request $request)
    // {
    //     $todos =Todo::all();
    //     return view('todos.boolean', ['todos' => $todos]);
    // }

    public function update(Request $request)
    {
        Todo::find($request->id)
        ->update(['state' => $request->state]);
        return redirect('todos');
    }

    // レコードを削除する
    public function remove(Request $request)
    {
        Todo::find($request->id)->delete();
        return redirect('todos');
    }

}

```
# 解決
ルート定義メソッドを修正して解決？
一応意図した挙動にはなった

# 参照
使用可能なルート定義メソッドの部分
https://readouble.com/laravel/5.8/ja/routing.html
FormからPUT、PATCH、DELETEリクエストを送る方法（Laravel）
https://qiita.com/kambe0331/items/ff49b175ea9d8edec8c9
POSTとPUTとPATCHの使い分けについて
https://teratail.com/questions/193410

```php

<?php

/*
|--------------------------------------------------------------------------
| 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('welcome');
});



Route::get('/login', 'LoginController@index');

Route::get('/register', 'RegisterController@index');
Route::post('/register', 'RegisterController@post');

Route::get('todos','TodosController@index');
Route::post('todos','TodosController@store');
Route::patch('/todos/{id}','TodosController@update');
Route::delete('/todos/{id}','TodosController@remove');

```

```php

@extends('layouts.parents')

@section('title', 'Todoリスト')

@section('content')
  @if(count($errors) > 0)
    <div>
      <ul>
        @foreach($errors->all() as $error)
          <li>{{ $error }}</li>
        @endforeach
      </ul>
    </div>
   @endif
<h1>Todoリスト</h1>
  <label><input type="radio" checked>すべて</label>
  <label><input type="radio">作業中</label>
  <label><input type="radio">完了</label>
    <table>
      <tr>
        <th>ID</th>
        <th>コメント</th>
        <th>状態</th>
      </tr>
      @foreach($todos as $todo)
        <tr>
        <!-- findで検索されたIDを取得 -->
          <input type="hidden" name="id" value="{{$todo->id}}">
          <td>{{$loop->iteration}}</td>
          <td>{{$todo->comment}}</td>
          @if($todo->state > 0)
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @method('PATCH')
            @csrf
            <!-- 作業中ボタン -->
            <td><input type="submit" value="作業中"></td>
            <input type="hidden" name="state" value="0">
          </form>
          @else
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @method('PATCH')
            @csrf
            <!-- 完了ボタン -->
            <td><input type="submit" value="完了"></td>
            <input type="hidden" name="state" value="1">
          </form>
          @endif
          <form action="{{url('/todos', $todo->id)}}" method="POST">
            @method('DELETE')
            @csrf
            <!-- 削除ボタン -->
            <td><button type="submit">削除</button></td>
          </form>
        </tr>
      @endforeach
    </table>
<h1>新規タスクの追加</h1>
<form action="todos" method="POST">
  @csrf
    <input type="text" name="comment" value="{{old('comment')}}">
    <!-- 追加ボタン -->
    <input type="submit" value="追加">
</form>
@endsection

```

```php

<?php

namespace App\Http\Controllers;

use App\Todo;
use Illuminate\Http\Request;
use App\Http\Requests\TodoRequest;

class TodosController extends Controller
{
    //DBにあるレコードを表示する
    public function index(Request $request)
    {
        $todos =Todo::all();
        return view('todos.index', ['todos' => $todos]);
    }

    //レコードを追加する
    public function store(TodoRequest $request)
    {
        $todo = new Todo;
        $form = $request->all();
        unset($form['_token']);
        $todo->fill($form)->save();
        return redirect('todos');
    }

    //stateを更新する
    public function update(Request $request)
    {
        Todo::find($request->id)
        ->update(['state' => $request->state]);
        return redirect('todos');
    }

    // レコードを削除する
    public function remove(Request $request)
    {
        Todo::find($request->id)
        ->delete();
        return redirect('todos');
    }

}

```