Laravel/ToDo

Model
Task.php


View
tasks/index.blade.php
!DOCTYPE html>
html lang="ja">
head>
    meta charset="utf-8">
    meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    meta http-equiv="X-UA-Compatible" content="ie=edge">
    meta name="csrf-token" content="{{ csrf_token() }}">
    link rel="stylesheet" href="{{asset('css/app.css')}}">
    title>Todo List App/title>
/head>
body>
div class="container">
    div class="row">
        div class="offset-md-2 col-md-8">
            h1 class="text-center">Todo List/h1>
 			
 			{{-- Session flash --}}
			@if(Session::has('success'))
			    div class="alert alert-success" role="alert">
			        button type="button" class="close" data-dismiss="alert" aria-label="Close">
			            span aria-hidden="true">×/span>
			        /button>
			        strong>Success:/strong>
			        {{ Session::get('success') }}
			    /div>
			@endif
			 
			{{-- Error Message --}}
			@if(count($errors) > 0)
			    div class="alert alert-danger" role="alert">
			        button type="button" class="close" data-dismiss="alert" aria-label="Close">
			            span aria-hidden="true">×/span>
			        /button>
			        strong>Error:/strong>
			        ul>
			            @foreach($errors->all() as $error)
			            li>{{ $error }}/li>
			            @endforeach
			        /ul>
			    /div>
			@endif

			{{-- tasks.store --}}
			form action="{{ route('tasks.store')}}" method="POST">
			  {{ csrf_field() }}
			  div class="form-group row">
			    div class="col-md-9">
			      input type="text" name="newTaskName" class="form-control" placeholder="Todo List">
			    /div>
			    div class="col-md-3">
			      input type="submit" class="btn btn-primary form-control" value="Add Task">
			    /div>
			  /div>
			/form>
			 
			{{-- Table --}}
			@if(count($tasks) > 0)
			    div class="table-responsive">
			        table class="table table-striped">
			        thead>
			            tr>
			                th scope="col">#/th>
			                th scope="col">Name/th>
			                th scope="col">Edit/th>
			                th scope="col">Delete/th>
			            /tr>
			        /thead>
			        tbody>
			            @foreach($tasks as $task)
			            tr>
			                th scope="row">{{ $task->id }}/th>
			                td>{{ $task->name }}/td>
			                td>
			                    a href="{{ route('tasks.edit', ['tasks' => $task->id]) }}" class="btn btn-outline-secondary">Edit/a>
			                /td>
			                td>
			                    form action="{{ route('tasks.destroy', ['tasks' => $task->id]) }}" method="POST">
			                        input type="hidden" name="_method" value="DELETE">
			                        input type="hidden" name="_token" value="{{ csrf_token() }}">
			                        input type="submit" class="btn btn-danger" value="Delete">
			                    /form>
			                /td>
			            /tr>
			            @endforeach
			        /tbody>
			        /table>
			    /div>
			@endif
			{{-- Pagination --}}
            {{ $tasks->links('vendor.pagination.simple-bootstrap-4') }}
        /div>
    /div>
/div>
footer class="footer">
    div class="container">
        div class="text-center">Copyright © @php echo date('Y'); @endphp {{ config('app.name') }} All Rights Reserved./div>
    /div>
/footer>
script src="{{asset('js/app.js')}}">/script>
/body>
/html>

tasks/edit.blade.php
!DOCTYPE html>
html lang="ja">
head>
    meta charset="utf-8">
    meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    meta http-equiv="X-UA-Compatible" content="ie=edge">
    meta name="csrf-token" content="{{ csrf_token() }}">
    link rel="stylesheet" href="{{asset('css/app.css')}}">
    title>Todo List App/title>
/head>
body>
div class="container">
    div class="row">
        div class="offset-md-2 col-md-8">
            h1 class="text-center">Todo List Edit/h1>
 			
 			@if(Session::has('success'))
			    div class="alert alert-success" role="alert">
			        button type="button" class="close" data-dismiss="alert" aria-label="Close">
			            span aria-hidden="true">×/span>
			        /button>
			        strong>Success:/strong>
			        {{ Session::get('success') }}
			    /div>
			@endif
			 
			@if(count($errors) > 0)
			    div class="alert alert-danger" role="alert">
			        button type="button" class="close" data-dismiss="alert" aria-label="Close">
			            span aria-hidden="true">×/span>
			        /button>
			        strong>Error:/strong>
			        ul>
			            @foreach($errors->all() as $error)
			            li>{{ $error }}/li>
			            @endforeach
			        /ul>
			    /div>
			@endif

            form action="{{ route('tasks.update', [$task->id]) }}" method="POST">
                {{ csrf_field() }}
                div class="form-group">
                    input type="hidden" name="_method" value="PUT">
                    input type="hidden" name="_token" value="{{ csrf_token() }}">
                    input type="text" name="updatedTaskName" class="form-control input-lg" value="{{ $task->name }}">
                /div>
 
                div class="form-group">
                    input type="submit" value="Save Changes" class="btn btn-success btn-lg">
                    a href="{{ route('tasks.index') }}" class="btn btn-danger btn-lg float-right">Go Back/a>
                /div>
 
            /form>
 
        /div>
    /div>
/div>
footer class="footer">
    div class="container">
        div class="text-center">Copyright © @php echo date('Y'); @endphp {{ config('app.name') }} All Rights Reserved./div>
    /div>
/footer>
script src="{{asset('js/app.js')}}">/script>
/body>
/html>


Controller
TaskController.php
namespace App\Http\Controllers;

use App\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $tasks = Task::orderBy('id', 'desc')->paginate(5);
  		return view('tasks.index', compact('tasks'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $this->validate($request, [
	        'newTaskName' => 'required|min:5|max:255',
	    ]); # 5文字未満、255文字以上は入力制限
	    $task = new Task;
	    $task->name = $request->newTaskName; # name="newTaskName"
	    $task->save();
		
		//記事が追加された時に上の方にメッセージを表示するようにします。セッションを使って、リダイレクト先で一回だけ表示できます。
	 	Session::flash('success', 'New has been succesfully added!');
		
	    return redirect()->route('tasks.index'); 
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function show(Task $task)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        $task = Task::findOrFail($id);
    	return view('tasks.edit', compact('task'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Task $task)
    {
        $this->validate($request, [
	        'updatedTaskName' => 'required|min:5|max:255',
	    ]);
	    $task = Task::findOrFail($id);
	    $task->name = $request->updatedTaskName;
	    $task->save();
		
		Session::flash('success', 'Task #' . $id . ' has been successfully update.');
	 
	    return redirect()->route('tasks.index');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Task  $task
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
	{
	    $task = Task::findOrFail($id);
	    $task->delete();
		
		Session::flash('success', 'Task #' . $id . ' has been successfully deleted.');
	 
	    return redirect()->route('tasks.index');
	}
}


Routes
Route::get('/', function () {
    return view('welcome');
});
Route::resource('/tasks', 'TaskController');