1. Create new model Category
php artisan make:model Category -m
2. Add to migration ***_create_categories_table.php
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}3. Migrate
php artisan migrate
4. Add to layout app.blade.php
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="/categories/new">Add Category<span class="sr-only">(current)</span></a>
</li>
</ul>
and
<div class="container">
@if(session()->has('success'))
<div class="alert alert-success">
{{ session()->get('success') }}
</div>
@endif
</div>5. Add to web.php new route
Route::group(['middleware'=> 'auth'],function() {
Route::group(['prefix' => 'categories'],function() {
Route::get('/new', 'CategoriesController@create');
Route::get('/', 'CategoriesController@index');
Route::post('/', 'CategoriesController@store');
Route::get('/{category}/edit', 'CategoriesController@edit');
Route::post('/{category}/update', 'CategoriesController@update');
Route::get('/{category}/delete', 'CategoriesController@destroy');
});
});6. Create new controller CategoriesController
php artisan make:controller CategoriesController -r
7. Add new view categories_create.blade.php
@extends('layouts.app')
@section('content')
<h1 class="text-center my-5">Create Category</h1>
<div class="row justify-content-center">
<div class="col-md-4">
<div class="card card-default">
<div class="card-header">
Create New Category
</div>
<div class="card-body">
@if($errors->any())
<div class="alert alert-danger">
<ul class="list-group">
@foreach($errors->all() as $error)
<li class="list-group-item">
{{$error}}
</li>
@endforeach
</ul>
</div>
@endif
<form action="/categories" method="POST">
@csrf
<div class="form-group">
<input type="text" class="form-control" name="name" placeholder="Name">
</div>
<div class="form-group text-center">
<button type="submit" class="btn btn-success">Create Category</button>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection8. Add to CategotiesController methods
public function create()
{
return view('categories_create');
}
and
public function store(Request $request)
{
$this->validate(\request(), [
'name' => 'required|min:3|max:20',
]);
$data = \request()->all();
$category = new Category();
$category->name = $data['name'];
$category->save();
session()->flash('success', 'Todo created successfully.');
return redirect('categories');
}9.Add new view categories.blade.php
@extends('layouts.app')
@section('content')
<h1 class="text-center my-5">Categories Page</h1>
<div class="row justify-content-center">
<div class="col-md-4">
<div class="card card-default">
<div class="card-header">
Categories
</div>
<div class="card-body">
@foreach($categories as $category)
<li class="list-group-item">
{{ $category->name }}
<div class="float-right">
<a href="/categories/{{ $category->id }}/edit" class="btn btn-success btn-sm">Edit</a>
<a href="/categories/{{ $category->id }}/delete" class="btn btn-danger btn-sm">Delete</a>
</div>
</li>
@endforeach
</div>
</div>
</div>
</div>
@endsection
10. Add to CategotiesController methods
public function index()
{
return view('categories')->with('categories', Category::all());
}and
public function destroy(Category $category)
{
$category->delete();
session()->flash('success', 'Category deleted successfully.');
return redirect('/categories');
}
11. Add new view categories_edit.blade.php
@extends('layouts.app')
@section('content')
<h1 class="text-center my-5">Edit Category</h1>
<div class="row justify-content-center">
<div class="col-md-4">
<div class="card card-default">
<div class="card-header">
Edit Category
</div>
<div class="card-body">
@if($errors->any())
<div class="alert alert-danger">
<ul class="list-group">
@foreach($errors->all() as $error)
<li class="list-group-item">
{{$error}}
</li>
@endforeach
</ul>
</div>
@endif
<form action="/categories/{{ $category->id }}/update" method="POST">
@csrf
<div class="form-group">
<input type="text" class="form-control" name="name" placeholder="Name" value="{{ $category->name }}">
</div>
<div class="form-group text-center">
<button type="submit" class="btn btn-success">Save Category</button>
</div>
</form>
</div>
</div>
</div>
</div>
@endsection12. Add to CategotiesController methods
public function edit(Category $category)
{
return view('categories_edit')->with('category', $category);
}
public function update(Category $category)
{
$this->validate(\request(), [
'name' => 'required|min:3|max:20',
]);
$data = \request()->all();
$category->name = $data['name'];
$category->save();
session()->flash('success', 'Category updated successfully.');
return redirect('/categories');
}