Laravel 8 CRUD Application Tutorial for Beginners, get message, get error (ok)

https://www.itsolutionstuff.com/post/laravel-8-crud-application-tutorial-for-beginnersexample.html

C:\xampp\htdocs\test\routes\web.php

ok

<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
/*
|--------------------------------------------------------------------------
| 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::resource('products', ProductController::class);

C:\xampp\htdocs\test\app\Http\Controllers\ProductController.php

<?php
namespace App\Http\Controllers;
use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller {
  /**
   * Display a listing of the resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function index() {
    $products = Product::latest()->paginate(2);
    return view('products.index', compact('products'))->with('i', (request()->input('page', 1) - 1) * 2);
  }
  /**
   * Show the form for creating a new resource.
   *
   * @return \Illuminate\Http\Response
   */
  public function create() {
    return view('products.create');
  }
  /**
   * Store a newly created resource in storage.
   *
   * @param  \Illuminate\Http\Request  $request
   * @return \Illuminate\Http\Response
   */
  public function store(Request $request) {
    $request->validate([
      'name'   => 'required',
      'detail' => 'required',
    ]);
    Product::create($request->all());
    return redirect()->route('products.index')->with('success', 'Product created successfully.');
  }
  /**
   * Display the specified resource.
   *
   * @param  \App\Models\Product  $product
   * @return \Illuminate\Http\Response
   */
  public function show(Product $product) {
    return view('products.show', compact('product'));
  }
  /**
   * Show the form for editing the specified resource.
   *
   * @param  \App\Models\Product  $product
   * @return \Illuminate\Http\Response
   */
  public function edit(Product $product) {
    return view('products.edit', compact('product'));
  }
  /**
   * Update the specified resource in storage.
   *
   * @param  \Illuminate\Http\Request  $request
   * @param  \App\Models\Product  $product
   * @return \Illuminate\Http\Response
   */
  public function update(Request $request, Product $product) {
    $request->validate([
      'name'   => 'required',
      'detail' => 'required',
    ]);
    $product->update($request->all());
    return redirect()->route('products.index')->with('success', 'Product updated successfully');
  }
  /**
   * Remove the specified resource from storage.
   *
   * @param  \App\Models\Product  $product
   * @return \Illuminate\Http\Response
   */
  public function destroy(Product $product) {
    $product->delete();
    return redirect()->route('products.index')->with('success','Product deleted successfully');
  }
}

C:\xampp\htdocs\test\app\Models\Product.php

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Product extends Model {
  use HasFactory;
  protected $fillable = [
    'name', 'detail',
  ];
}

C:\xampp\htdocs\test\resources\views\products\layout.blade.php

<!DOCTYPE html>
<html>
  <head>
    <title>Laravel 8 CRUD Application - ItSolutionStuff.com</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">
  </head>
  <body>
    <div class="container"> 
      @yield('content') 
    </div>
  </body>
</html>

C:\xampp\htdocs\test\resources\views\products\create.blade.php

@extends('products.layout') 
@section('content') <div class="row">
  <div class="col-lg-12 margin-tb">
    <div class="pull-left">
      <h2>Add New Product</h2>
    </div>
    <div class="pull-right">
      <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>
    </div>
  </div>
</div> 
@if ($errors->any()) 
  <div class="alert alert-danger">
    <strong>Whoops!</strong> There were some problems with your input.<br><br>
    <ul> 
      @foreach ($errors->all() as $error) 
        <li>
          {{ $error }}
        </li> 
      @endforeach 
    </ul>
  </div> 
@endif 
<form action="{{ route('products.store') }}" method="POST"> 
  @csrf 
  <div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
      <div class="form-group">
        <strong>Name:</strong>
        <input type="text" name="name" class="form-control" placeholder="Name">
      </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
      <div class="form-group">
        <strong>Detail:</strong>
        <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail"></textarea>
      </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12 text-center">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form> 
@endsection

C:\xampp\htdocs\test\resources\views\products\edit.blade.php

@extends('products.layout') 
@section('content') <div class="row">
  <div class="col-lg-12 margin-tb">
    <div class="pull-left">
      <h2>Edit Product</h2>
    </div>
    <div class="pull-right">
      <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>
    </div>
  </div>
</div> 
@if ($errors->any()) <div class="alert alert-danger">
  <strong>Whoops!</strong> There were some problems with your input.<br><br>
  <ul> 
    @foreach ($errors->all() as $error) 
      <li>{{ $error }}</li> 
    @endforeach 
  </ul>
</div> 
@endif <form action="{{ route('products.update',$product->id) }}" method="POST"> 
  @csrf 
  @method('PUT') <div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
      <div class="form-group">
        <strong>Name:</strong>
        <input type="text" name="name" value="{{ $product->name }}" class="form-control" placeholder="Name">
      </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12">
      <div class="form-group">
        <strong>Detail:</strong>
        <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail">{{ $product->detail }}</textarea>
      </div>
    </div>
    <div class="col-xs-12 col-sm-12 col-md-12 text-center">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form> 
@endsection

C:\xampp\htdocs\test\resources\views\products\index.blade.php

@extends('products.layout') @section('content') <div class="row">
  <div class="col-lg-12 margin-tb">
    <div class="pull-left">
      <h2>Laravel 8 CRUD Example from scratch - ItSolutionStuff.com</h2>
    </div>
    <div class="pull-right">
      <a class="btn btn-success" href="{{ route('products.create') }}"> Create New Product</a>
    </div>
  </div>
</div> 
@if ($message = Session::get('success')) 
  <div class="alert alert-success">
    <p>{{ $message }}</p>
  </div> 
@endif 
<table class="table table-bordered">
  <tr>
    <th>No</th>
    <th>Name</th>
    <th>Details</th>
    <th width="280px">Action</th>
  </tr> @foreach ($products as $product) <tr>
    <td>{{ ++$i }}</td>
    <td>{{ $product->name }}</td>
    <td>{{ $product->detail }}</td>
    <td>
      <form action="{{ route('products.destroy',$product->id) }}" method="POST">
        <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>
        <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Delete</button>
      </form>
    </td>
  </tr> 
  @endforeach
</table> {!! $products->links('pagination::bootstrap-4') !!} 
@endsection

C:\xampp\htdocs\test\resources\views\products\show.blade.php

@extends('products.layout') 
@section('content') <div class="row">
  <div class="col-lg-12 margin-tb">
    <div class="pull-left">
      <h2> Show Product</h2>
    </div>
    <div class="pull-right">
      <a class="btn btn-primary" href="{{ route('products.index') }}">Back</a>
    </div>
  </div>
</div>
<div class="row">
  <div class="col-xs-12 col-sm-12 col-md-12">
    <div class="form-group">
      <strong>Name:</strong> {{ $product->name }} </div>
  </div>
  <div class="col-xs-12 col-sm-12 col-md-12">
    <div class="form-group">
      <strong>Details:</strong> {{ $product->detail }} </div>
  </div>
</div> 
@endsection

Last updated