Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel10project>composer create-project laravel/laravel laravel10project
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Create Controller AuthController
php artisan make:controller AuthController
C:\xampp\htdocs\laravel\laravel10project>php artisan make:controller AuthController
app\Http\Controllers\AuthController.php
//app\Http\Controllers\AuthController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\ValidationException; class AuthController extends Controller { public function register() { return view('auth/register'); } public function registerSave(Request $request) { Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required|email', 'password' => 'required|confirmed' ])->validate(); User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'level' => 'Admin' ]); return redirect()->route('login'); } public function login() { return view('auth/login'); } public function loginAction(Request $request) { Validator::make($request->all(), [ 'email' => 'required|email', 'password' => 'required' ])->validate(); if (!Auth::attempt($request->only('email', 'password'), $request->boolean('remember'))) { throw ValidationException::withMessages([ 'email' => trans('auth.failed') ]); } $request->session()->regenerate(); return redirect()->route('dashboard'); } public function logout(Request $request) { Auth::guard('web')->logout(); $request->session()->invalidate(); return redirect('/'); } public function profile() { return view('profile'); } }Create Controller ProductController
php artisan make:controller ProductController --resource
C:\xampp\htdocs\laravel\laravel10project>php artisan make:controller ProductController --resource
app\Http\Controllers\ProductController.php
//app\Http\Controllers\ProductController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Product; class ProductController extends Controller { /** * Display a listing of the resource. */ public function index() { $product = Product::orderBy('created_at', 'DESC')->get(); return view('products.index', compact('product')); } /** * Show the form for creating a new resource. */ public function create() { return view('products.create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { Product::create($request->all()); return redirect()->route('products')->with('success', 'Product added successfully'); } /** * Display the specified resource. */ public function show(string $id) { $product = Product::findOrFail($id); return view('products.show', compact('product')); } /** * Show the form for editing the specified resource. */ public function edit(string $id) { $product = Product::findOrFail($id); return view('products.edit', compact('product')); } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { $product = Product::findOrFail($id); $product->update($request->all()); return redirect()->route('products')->with('success', 'product updated successfully'); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $product = Product::findOrFail($id); $product->delete(); return redirect()->route('products')->with('success', 'product deleted successfully'); } }Database Migration
C:\xampp\htdocs\laravel\laravel10project>php artisan make:model Product -m
database/migrations/create_products_table.php
//database/migrations/create_products_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('price'); $table->string('product_code'); $table->text('description'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('products'); } };run this migration
C:\xampp\htdocs\laravel\laravel10project>php artisan migrate
open app/Product.php and update the below field
app/Models/Product.php
//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 = [ 'title', 'price', 'product_code', 'description' ]; }Templates
Download SB Admin 2 https://startbootstrap.com/theme/sb-admin-2
create folder layouts new file app.blade.php resources/views/layouts/app.blade.php
//resources/views/layouts/app.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin 2 - Dashboard</title> <!-- Custom fonts for this template--> <link href="{{ asset('admin_assets/vendor/fontawesome-free/css/all.min.css') }}" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet"> <!-- Custom styles for this template--> <link href="{{ asset('admin_assets/css/sb-admin-2.min.css') }}" rel="stylesheet"> </head> <body id="page-top"> <!-- Page Wrapper --> <div id="wrapper"> <!-- Sidebar --> @include('layouts.sidebar') <!-- End of Sidebar --> <!-- Content Wrapper --> <div id="content-wrapper" class="d-flex flex-column"> <!-- Main Content --> <div id="content"> <!-- Topbar --> @include('layouts.navbar') <!-- End of Topbar --> <!-- Begin Page Content --> <div class="container-fluid"> <!-- Page Heading --> <div class="d-sm-flex align-items-center justify-content-between mb-4"> <h1 class="h3 mb-0 text-gray-800">@yield('title')</h1> </div> @yield('contents') <!-- Content Row --> </div> <!-- /.container-fluid --> </div> <!-- End of Main Content --> <!-- Footer --> @include('layouts.footer') <!-- End of Footer --> </div> <!-- End of Content Wrapper --> </div> <!-- End of Page Wrapper --> <!-- Scroll to Top Button--> <a class="scroll-to-top rounded" href="#page-top"> <i class="fas fa-angle-up"></i> </a> <!-- Bootstrap core JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('admin_assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('admin_assets/js/sb-admin-2.min.js') }}"></script> <!-- Page level plugins --> <script src="{{ asset('admin_assets/vendor/chart.js/Chart.min.js') }}"></script> </body> </html>create folder admin_assets public/admin_assets paste css,img,js and vendor folder from downloaded template
// <footer class="sticky-footer bg-white"> <div class="container my-auto"> <div class="copyright text-center my-auto"> <span>Copyright © Your Website 2021</span> </div> </div> </footer>include file
resources/views/layouts/footer.blade.php
//resources/views/layouts/footer.blade.php <footer class="sticky-footer bg-white"> <div class="container my-auto"> <div class="copyright text-center my-auto"> <span>Copyright © Your Website 2021</span> </div> </div> </footer>resources/views/layouts/navbar.blade.php
//resources/views/layouts/navbar.blade.php <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow"> <!-- Sidebar Toggle (Topbar) --> <button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3"> <i class="fa fa-bars"></i> </button> <!-- Topbar Search --> <form class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search"> <div class="input-group"> <input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"> <div class="input-group-append"> <button class="btn btn-primary" type="button"> <i class="fas fa-search fa-sm"></i> </button> </div> </div> </form> <!-- Topbar Navbar --> <ul class="navbar-nav ml-auto"> <!-- Nav Item - Search Dropdown (Visible Only XS) --> <li class="nav-item dropdown no-arrow d-sm-none"> <a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fas fa-search fa-fw"></i> </a> <!-- Dropdown - Messages --> <div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in" aria-labelledby="searchDropdown"> <form class="form-inline mr-auto w-100 navbar-search"> <div class="input-group"> <input type="text" class="form-control bg-light border-0 small" placeholder="Search for..." aria-label="Search" aria-describedby="basic-addon2"> <div class="input-group-append"> <button class="btn btn-primary" type="button"> <i class="fas fa-search fa-sm"></i> </button> </div> </div> </form> </div> </li> <!-- Nav Item - Alerts --> <li class="nav-item dropdown no-arrow mx-1"> <a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fas fa-bell fa-fw"></i> <!-- Counter - Alerts --> <span class="badge badge-danger badge-counter">3+</span> </a> <!-- Dropdown - Alerts --> <div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="alertsDropdown"> <h6 class="dropdown-header"> Alerts Center </h6> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="mr-3"> <div class="icon-circle bg-primary"> <i class="fas fa-file-alt text-white"></i> </div> </div> <div> <div class="small text-gray-500">December 12, 2019</div> <span class="font-weight-bold">A new monthly report is ready to download!</span> </div> </a> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="mr-3"> <div class="icon-circle bg-success"> <i class="fas fa-donate text-white"></i> </div> </div> <div> <div class="small text-gray-500">December 7, 2019</div> $290.29 has been deposited into your account! </div> </a> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="mr-3"> <div class="icon-circle bg-warning"> <i class="fas fa-exclamation-triangle text-white"></i> </div> </div> <div> <div class="small text-gray-500">December 2, 2019</div> Spending Alert: We've noticed unusually high spending for your account. </div> </a> <a class="dropdown-item text-center small text-gray-500" href="#">Show All Alerts</a> </div> </li> <!-- Nav Item - Messages --> <li class="nav-item dropdown no-arrow mx-1"> <a class="nav-link dropdown-toggle" href="#" id="messagesDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fas fa-envelope fa-fw"></i> <!-- Counter - Messages --> <span class="badge badge-danger badge-counter">7</span> </a> <!-- Dropdown - Messages --> <div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="messagesDropdown"> <h6 class="dropdown-header"> Message Center </h6> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="dropdown-list-image mr-3"> <img class="rounded-circle" src="https://startbootstrap.github.io/startbootstrap-sb-admin-2/img/undraw_profile_1.svg" alt="..."> <div class="status-indicator bg-success"></div> </div> <div class="font-weight-bold"> <div class="text-truncate">Hi there! I am wondering if you can help me with a problem I've been having.</div> <div class="small text-gray-500">Emily Fowler · 58m</div> </div> </a> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="dropdown-list-image mr-3"> <img class="rounded-circle" src="https://startbootstrap.github.io/startbootstrap-sb-admin-2/img/undraw_profile_2.svg" alt="..."> <div class="status-indicator"></div> </div> <div> <div class="text-truncate">I have the photos that you ordered last month, how would you like them sent to you?</div> <div class="small text-gray-500">Jae Chun · 1d</div> </div> </a> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="dropdown-list-image mr-3"> <img class="rounded-circle" src="https://startbootstrap.github.io/startbootstrap-sb-admin-2/img/undraw_profile_3.svg" alt="..."> <div class="status-indicator bg-warning"></div> </div> <div> <div class="text-truncate">Last month's report looks great, I am very happy with the progress so far, keep up the good work!</div> <div class="small text-gray-500">Morgan Alvarez · 2d</div> </div> </a> <a class="dropdown-item d-flex align-items-center" href="#"> <div class="dropdown-list-image mr-3"> <img class="rounded-circle" src="https://source.unsplash.com/Mv9hjnEUHR4/60x60" alt="..."> <div class="status-indicator bg-success"></div> </div> <div> <div class="text-truncate">Am I a good boy? The reason I ask is because someone told me that people say this to all dogs, even if they aren't good...</div> <div class="small text-gray-500">Chicken the Dog · 2w</div> </div> </a> <a class="dropdown-item text-center small text-gray-500" href="#">Read More Messages</a> </div> </li> <div class="topbar-divider d-none d-sm-block"></div> <!-- Nav Item - User Information --> <li class="nav-item dropdown no-arrow"> <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <span class="mr-2 d-none d-lg-inline text-gray-600 small"> {{ auth()->user()->name }} <br> <small>{{ auth()->user()->level }}</small> </span> <img class="img-profile rounded-circle" src="https://startbootstrap.github.io/startbootstrap-sb-admin-2/img/undraw_profile.svg"> </a> <!-- Dropdown - User Information --> <div class="dropdown-menu dropdown-menu-right shadow animated--grow-in" aria-labelledby="userDropdown"> <a class="dropdown-item" href="/profile"> <i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i> Profile </a> <a class="dropdown-item" href="#"> <i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i> Settings </a> <a class="dropdown-item" href="#"> <i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400"></i> Activity Log </a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="{{ route('logout') }}"> <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i> Logout </a> </div> </li> </ul> </nav>resources/views/layouts/sidebar.blade.php
//resources/views/layouts/sidebar.blade.php <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar"> <!-- Sidebar - Brand --> <a class="sidebar-brand d-flex align-items-center justify-content-center" href="index.html"> <div class="sidebar-brand-icon rotate-n-15"> <i class="fas fa-laugh-wink"></i> </div> <div class="sidebar-brand-text mx-3">SB Admin <sup>2</sup></div> </a> <!-- Divider --> <hr class="sidebar-divider my-0"> <!-- Nav Item - Dashboard --> <li class="nav-item"> <a class="nav-link" href="{{ route('dashboard') }}"> <i class="fas fa-fw fa-tachometer-alt"></i> <span>Dashboard</span></a> </li> <li class="nav-item"> <a class="nav-link" href="{{ route('products') }}"> <i class="fas fa-fw fa-tachometer-alt"></i> <span>Product</span></a> </li> <li class="nav-item"> <a class="nav-link" href="/profile"> <i class="fas fa-fw fa-tachometer-alt"></i> <span>Profile</span></a> </li> <!-- Divider --> <hr class="sidebar-divider d-none d-md-block"> <!-- Sidebar Toggler (Sidebar) --> <div class="text-center d-none d-md-inline"> <button class="rounded-circle border-0" id="sidebarToggle"></button> </div> </ul>resources/views/dashboard.blade.php
//resources/views/dashboard.blade.php @extends('layouts.app') @section('title', 'Dashboard - Laravel Admin Panel With Login and Registration') @section('contents') <div class="row"> Dashboard </div> @endsectionresources/views/profile.blade.php
//resources/views/profile.blade.php @extends('layouts.app') @section('title', 'Profile') @section('contents') <h1 class="mb-0">Profile</h1> <hr /> <form method="POST" enctype="multipart/form-data" id="profile_setup_frm" action="" > <div class="row"> <div class="col-md-12 border-right"> <div class="p-3 py-5"> <div class="d-flex justify-content-between align-items-center mb-3"> <h4 class="text-right">Profile Settings</h4> </div> <div class="row" id="res"></div> <div class="row mt-2"> <div class="col-md-6"> <label class="labels">Name</label> <input type="text" name="name" class="form-control" placeholder="first name" value="{{ auth()->user()->name }}"> </div> <div class="col-md-6"> <label class="labels">Email</label> <input type="text" name="email" disabled class="form-control" value="{{ auth()->user()->email }}" placeholder="Email"> </div> </div> <div class="row mt-2"> <div class="col-md-6"> <label class="labels">Phone</label> <input type="text" name="phone" class="form-control" placeholder="Phone Number" value="{{ auth()->user()->phone }}"> </div> <div class="col-md-6"> <label class="labels">Address</label> <input type="text" name="address" class="form-control" value="{{ auth()->user()->address }}" placeholder="Address"> </div> </div> <div class="mt-5 text-center"><button id="btn" class="btn btn-primary profile-button" type="submit">Save Profile</button></div> </div> </div> </div> </form> @endsectioncreate folder auth and file login resources/views/auth/login.blade.php
//resources/views/auth/login.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin 2 - Login</title> <!-- Custom fonts for this template--> <link href="{{ asset('admin_assets/vendor/fontawesome-free/css/all.min.css') }}" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet"> <!-- Custom styles for this template--> <link href="{{ asset('admin_assets/css/sb-admin-2.min.css') }}" rel="stylesheet"> </head> <body class="bg-gradient-primary"> <div class="container"> <!-- Outer Row --> <div class="row justify-content-center"> <div class="col-xl-10 col-lg-12 col-md-9"> <div class="card o-hidden border-0 shadow-lg my-5"> <div class="card-body p-0"> <!-- Nested Row within Card Body --> <div class="row"> <div class="col-lg-6 d-none d-lg-block bg-login-image"></div> <div class="col-lg-6"> <div class="p-5"> <div class="text-center"> <h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1> </div> <form action="{{ route('login.action') }}" method="POST" class="user"> @csrf @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <div class="form-group"> <input name="email" type="email" class="form-control form-control-user" id="exampleInputEmail" aria-describedby="emailHelp" placeholder="Enter Email Address..."> </div> <div class="form-group"> <input name="password" type="password" class="form-control form-control-user" id="exampleInputPassword" placeholder="Password"> </div> <div class="form-group"> <div class="custom-control custom-checkbox small"> <input name="remember" type="checkbox" class="custom-control-input" id="customCheck"> <label class="custom-control-label" for="customCheck">Remember Me</label> </div> </div> <button type="submit" class="btn btn-primary btn-block btn-user">Login</button> </form> <hr> <div class="text-center"> <a class="small" href="{{ route('register') }}">Create an Account!</a> </div> </div> </div> </div> </div> </div> </div> </div> </div> <!-- Bootstrap core JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('admin_assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('admin_assets/js/sb-admin-2.min.js') }}"></script> </body> </html>resources/views/auth/register.blade.php
//resources/views/auth/register.blade.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin 2 - Register</title> <!-- Custom fonts for this template--> <link href="{{ asset('admin_assets/vendor/fontawesome-free/css/all.min.css') }}" rel="stylesheet" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet"> <!-- Custom styles for this template--> <link href="{{ asset('admin_assets/css/sb-admin-2.min.css') }}" rel="stylesheet"> </head> <body class="bg-gradient-primary"> <div class="container"> <div class="card o-hidden border-0 shadow-lg my-5"> <div class="card-body p-0"> <!-- Nested Row within Card Body --> <div class="row"> <div class="col-lg-5 d-none d-lg-block bg-register-image"></div> <div class="col-lg-7"> <div class="p-5"> <div class="text-center"> <h1 class="h4 text-gray-900 mb-4">Create an Account!</h1> </div> <form action="{{ route('register.save') }}" method="POST" class="user"> @csrf <div class="form-group"> <input name="name" type="text" class="form-control form-control-user @error('name')is-invalid @enderror" id="exampleInputName" placeholder="Name"> @error('name') <span class="invalid-feedback">{{ $message }}</span> @enderror </div> <div class="form-group"> <input name="email" type="email" class="form-control form-control-user @error('email')is-invalid @enderror" id="exampleInputEmail" placeholder="Email Address"> @error('email') <span class="invalid-feedback">{{ $message }}</span> @enderror </div> <div class="form-group row"> <div class="col-sm-6 mb-3 mb-sm-0"> <input name="password" type="password" class="form-control form-control-user @error('password')is-invalid @enderror" id="exampleInputPassword" placeholder="Password"> @error('password') <span class="invalid-feedback">{{ $message }}</span> @enderror </div> <div class="col-sm-6"> <input name="password_confirmation" type="password" class="form-control form-control-user @error('password_confirmation')is-invalid @enderror" id="exampleRepeatPassword" placeholder="Repeat Password"> @error('password_confirmation') <span class="invalid-feedback">{{ $message }}</span> @enderror </div> </div> <button type="submit" class="btn btn-primary btn-user btn-block">Register Account</button> </form> <hr> <div class="text-center"> <a class="small" href="{{ route('login') }}">Already have an account? Login!</a> </div> </div> </div> </div> </div> </div> </div> <!-- Bootstrap core JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('admin_assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('admin_assets/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('admin_assets/js/sb-admin-2.min.js') }}"></script> </body> </html>create products folder and file resources/views/products/index.blade.php
//resources/views/products/index.blade.php @extends('layouts.app') @section('title', 'Home Product') @section('contents') <div class="d-flex align-items-center justify-content-between"> <h1 class="mb-0">List Product</h1> <a href="{{ route('products.create') }}" class="btn btn-primary">Add Product</a> </div> <hr /> @if(Session::has('success')) <div class="alert alert-success" role="alert"> {{ Session::get('success') }} </div> @endif <table class="table table-hover"> <thead class="table-primary"> <tr> <th>#</th> <th>Title</th> <th>Price</th> <th>Product Code</th> <th>Description</th> <th>Action</th> </tr> </thead> <tbody>+ @if($product->count() > 0) @foreach($product as $rs) <tr> <td class="align-middle">{{ $loop->iteration }}</td> <td class="align-middle">{{ $rs->title }}</td> <td class="align-middle">{{ $rs->price }}</td> <td class="align-middle">{{ $rs->product_code }}</td> <td class="align-middle">{{ $rs->description }}</td> <td class="align-middle"> <div class="btn-group" role="group" aria-label="Basic example"> <a href="{{ route('products.show', $rs->id) }}" type="button" class="btn btn-secondary">Detail</a> <a href="{{ route('products.edit', $rs->id)}}" type="button" class="btn btn-warning">Edit</a> <form action="{{ route('products.destroy', $rs->id) }}" method="POST" type="button" class="btn btn-danger p-0" onsubmit="return confirm('Delete?')"> @csrf @method('DELETE') <button class="btn btn-danger m-0">Delete</button> </form> </div> </td> </tr> @endforeach @else <tr> <td class="text-center" colspan="5">Product not found</td> </tr> @endif </tbody> </table> @endsectionresources/views/products/create.blade.php
//resources/views/products/create.blade.php @extends('layouts.app') @section('title', 'Create Product') @section('contents') <h1 class="mb-0">Add Product</h1> <hr /> <form action="{{ route('products.store') }}" method="POST" enctype="multipart/form-data"> @csrf <div class="row mb-3"> <div class="col"> <input type="text" name="title" class="form-control" placeholder="Title"> </div> <div class="col"> <input type="text" name="price" class="form-control" placeholder="Price"> </div> </div> <div class="row mb-3"> <div class="col"> <input type="text" name="product_code" class="form-control" placeholder="Product Code"> </div> <div class="col"> <textarea class="form-control" name="description" placeholder="Descriptoin"></textarea> </div> </div> <div class="row"> <div class="d-grid"> <button type="submit" class="btn btn-primary">Submit</button> </div> </div> </form> @endsectionresources/views/products/show.blade.php
//resources/views/products/show.blade.php @extends('layouts.app') @section('title', 'Show Product') @section('contents') <h1 class="mb-0">Detail Product</h1> <hr /> <div class="row"> <div class="col mb-3"> <label class="form-label">Title</label> <input type="text" name="title" class="form-control" placeholder="Title" value="{{ $product->title }}" readonly> </div> <div class="col mb-3"> <label class="form-label">Price</label> <input type="text" name="price" class="form-control" placeholder="Price" value="{{ $product->price }}" readonly> </div> </div> <div class="row"> <div class="col mb-3"> <label class="form-label">product_code</label> <input type="text" name="product_code" class="form-control" placeholder="Product Code" value="{{ $product->product_code }}" readonly> </div> <div class="col mb-3"> <label class="form-label">Description</label> <textarea class="form-control" name="description" placeholder="Descriptoin" readonly>{{ $product->description }}</textarea> </div> </div> <div class="row"> <div class="col mb-3"> <label class="form-label">Created At</label> <input type="text" name="created_at" class="form-control" placeholder="Created At" value="{{ $product->created_at }}" readonly> </div> <div class="col mb-3"> <label class="form-label">Updated At</label> <input type="text" name="updated_at" class="form-control" placeholder="Updated At" value="{{ $product->updated_at }}" readonly> </div> </div> @endsectionresources/views/products/edit.blade.php
//resources/views/products/edit.blade.php @extends('layouts.app') @section('title', 'Edit Product') @section('contents') <h1 class="mb-0">Edit Product</h1> <hr /> <form action="{{ route('products.update', $product->id) }}" method="POST"> @csrf @method('PUT') <div class="row"> <div class="col mb-3"> <label class="form-label">Title</label> <input type="text" name="title" class="form-control" placeholder="Title" value="{{ $product->title }}" > </div> <div class="col mb-3"> <label class="form-label">Price</label> <input type="text" name="price" class="form-control" placeholder="Price" value="{{ $product->price }}" > </div> </div> <div class="row"> <div class="col mb-3"> <label class="form-label">Product Code</label> <input type="text" name="product_code" class="form-control" placeholder="Product Code" value="{{ $product->product_code }}" > </div> <div class="col mb-3"> <label class="form-label">Description</label> <textarea class="form-control" name="description" placeholder="Descriptoin" >{{ $product->description }}</textarea> </div> </div> <div class="row"> <div class="d-grid"> <button class="btn btn-warning">Update</button> </div> </div> </form> @endsectionRoutes
routes/web.php
//routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\AuthController; use App\Http\Controllers\ProductController; Route::get('/', function () { return view('welcome'); }); Route::controller(AuthController::class)->group(function () { Route::get('register', 'register')->name('register'); Route::post('register', 'registerSave')->name('register.save'); Route::get('login', 'login')->name('login'); Route::post('login', 'loginAction')->name('login.action'); Route::get('logout', 'logout')->middleware('auth')->name('logout'); }); Route::middleware('auth')->group(function () { Route::get('dashboard', function () { return view('dashboard'); })->name('dashboard'); Route::controller(ProductController::class)->prefix('products')->group(function () { Route::get('', 'index')->name('products'); Route::get('create', 'create')->name('products.create'); Route::post('store', 'store')->name('products.store'); Route::get('show/{id}', 'show')->name('products.show'); Route::get('edit/{id}', 'edit')->name('products.edit'); Route::put('edit/{id}', 'update')->name('products.update'); Route::delete('destroy/{id}', 'destroy')->name('products.destroy'); }); Route::get('/profile', [App\Http\Controllers\AuthController::class, 'profile'])->name('profile'); });Run C:\xampp\htdocs\laravel\laravel10project>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000