Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel>composer create-project --prefer-dist laravel/laravel my-app
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\my-app>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('/'); } }Create Controller ProductController
php artisan make:controller ProductController
C:\xampp\htdocs\laravel\my-app>php artisan make:controller ProductController
app\Http\Controllers\ProductController.php
//app\Http\Controllers\ProductController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Models\products; use App\Models\category; class ProductController extends Controller { public function index() { $product = products::get(); return view('products.index', ['data' => $product]); } public function add() { $category = category::get(); return view('products.form', ['category' => $category]); } public function save(Request $request) { $data = [ 'item_code' => $request->item_code, 'productname' => $request->productname, 'category' => $request->id_category, 'price' => $request->price ]; products::create($data); return redirect()->route('products'); } public function edit($id) { $product = products::find($id); $category = category::get(); return view('products.form', ['product' => $product, 'category' => $category]); } public function update($id, Request $request) { $data = [ 'item_code' => $request->item_code, 'productname' => $request->productname, 'category' => $request->id_category, 'price' => $request->price ]; products::find($id)->update($data); return redirect()->route('products'); } public function delete($id) { products::find($id)->delete(); return redirect()->route('products'); } }Create Controller CategoryController
php artisan make:controller CategoryController
C:\xampp\htdocs\laravel\my-app>php artisan make:controller CategoryController
app\Http\Controllers\CategoryController.php
//app\Http\Controllers\CategoryController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\category; class CategoryController extends Controller { public function index() { $category = category::get(); return view('category/index', ['category' => $category]); } public function add() { return view('category.form'); } public function save(Request $request) { category::create(['name' => $request->name]); return redirect()->route('category'); } public function edit($id) { $category = category::find($id); //echo "$category"; return view('category.form', ['category' => $category]); } public function update($id, Request $request) { category::find($id)->update(['name' => $request->name]); return redirect()->route('category'); } public function delete($id) { category::destroy($id); return redirect()->route('category'); } }Database Migration
php artisan make:model products -m
C:\xampp\htdocs\laravel\my-app>php artisan make:model products -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() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('item_code')->nullable(); $table->string('productname')->nullable(); $table->string('category')->nullable(); $table->string('price')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('products'); } };php artisan make:model category -m
C:\xampp\htdocs\laravel\my-app>php artisan make:model category -m
database/migrations/create_category_table.php
//database/migrations/create_category_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() { Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('categories'); } };database/migrations/create_users_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() { Schema::create('users', function (Blueprint $table) { $table->id(); $table->string('name'); $table->string('email'); $table->string('password'); $table->string('level'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('users'); } };run this migration
C:\xampp\htdocs\laravel\my-app>php artisan migrate
Templates
Download SB Admin 2 https://startbootstrap.com/theme/sb-admin-2
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> @endsectionCreate folder layouts then app.blade.php file
resources/views/layouts/app.blade.php
//resources/views/layouts/dashboard.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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/js/sb-admin-2.min.js') }}"></script> <!-- Page level plugins --> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/chart.js/Chart.min.js') }}"></script> </body> </html>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="#"> <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> @if (auth()->user()->level == 'Admin') <li class="nav-item"> <a class="nav-link" href="/category"> <i class="fas fa-fw fa-tachometer-alt"></i> <span>Category</span></a> </li> @endif <!-- 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> <!-- Sidebar Message --> <div class="sidebar-card d-none d-lg-flex"> <img class="sidebar-card-illustration mb-2" src="https://startbootstrap.github.io/startbootstrap-sb-admin-2/img/undraw_rocket.svg" alt="..."> <p class="text-center mb-2"><strong>SB Admin Pro</strong> is packed with premium features, components, and more!</p> <a class="btn btn-success btn-sm" href="https://startbootstrap.com/theme/sb-admin-pro">Upgrade to Pro!</a> </div> </ul>Create auth folder then login.blade.php file
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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/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('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery/jquery.min.js') }}"></script> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script> <!-- Core plugin JavaScript--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/vendor/jquery-easing/jquery.easing.min.js') }}"></script> <!-- Custom scripts for all pages--> <script src="{{ asset('https://startbootstrap.github.io/startbootstrap-sb-admin-2/js/sb-admin-2.min.js') }}"></script> </body> </html>create products folder then form.blade.php file
resources/views/products/form.blade.php
//resources/views/products/form.blade.php @extends('layouts.app') @section('title', 'Form products') @section('contents') <form action="{{ isset($product) ? route('products.update', $product->id) : route('products.save') }}" method="post"> @csrf <div class="row"> <div class="col-12"> <div class="card shadow mb-4"> <div class="card-header py-3"> <h6 class="m-0 font-weight-bold text-primary">{{ isset($product) ? 'Form Edit product' : 'Form plus product' }}</h6> </div> <div class="card-body"> <div class="form-group"> <label for="item_code">code product</label> <input type="text" class="form-control" id="item_code" name="item_code" value="{{ isset($product) ? $product->item_code : '' }}"> </div> <div class="form-group"> <label for="productname">Name product</label> <input type="text" class="form-control" id="productname" name="productname" value="{{ isset($product) ? $product->productname : '' }}"> </div> <div class="form-group"> <label for="id_category">Category product</label> <select name="id_category" id="id_category" class="custom-select"> <option value="" selected disabled hidden>-- Choose Category --</option> @foreach ($category as $row) <option value="{{ $row->name }}" {{ isset($product) ? ($product->id_category == $row->id ? 'selected' : '') : '' }}>{{ $row->name }}</option> @endforeach </select> </div> <div class="form-group"> <label for="price">price product</label> <input type="number" class="form-control" id="price" name="price" value="{{ isset($product) ? $product->price : '' }}"> </div> </div> <div class="card-footer"> <button type="submit" class="btn btn-primary">Save</button> </div> </div> </div> </div> </form> @endsectionresources/views/products/index.blade.php
//resources/views/products/index.blade.php @extends('layouts.app') @section('title', 'Data product') @section('contents') <div class="card shadow mb-4"> <div class="card-header py-3"> <h6 class="m-0 font-weight-bold text-primary">Data product</h6> </div> <div class="card-body"> @if (auth()->user()->level == 'Admin') <a href="{{ route('products.add') }}" class="btn btn-primary mb-3">Add product</a> @endif <div class="table-responsive"> <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> <thead> <tr> <th>No</th> <th>code product</th> <th>name product</th> <th>Category</th> <th>Price</th> @if (auth()->user()->level == 'Admin') <th>Action</th> @endif </tr> </thead> <tbody> @php($no = 1) @foreach ($data as $row) <tr> <th>{{ $no++ }}</th> <td>{{ $row->item_code }}</td> <td>{{ $row->productname }}</td> <td>{{ $row->category }}</td> <td>{{ $row->price }}</td> @if (auth()->user()->level == 'Admin') <td> <a href="{{ route('products.edit', $row->id) }}" class="btn btn-warning">Edit</a> <a href="{{ route('products.delete', $row->id) }}" class="btn btn-danger">Delete</a> </td> @endif </tr> @endforeach </tbody> </table> </div> </div> </div> @endsectioncreate category folder then form.blade.php file
resources/views/category/form.blade.php
//resources/views/category/form.blade.php @extends('layouts.app') @section('title', 'Form Category') @section('contents') <form action="{{ isset($category) ? route('category.update', $category->id) : route('category.save') }}" method="post"> @csrf <div class="row"> <div class="col-12"> <div class="card shadow mb-4"> <div class="card-header py-3"> <h6 class="m-0 font-weight-bold text-primary">{{ isset($category) ? 'Form Edit Category' : 'Form add Category' }}</h6> </div> <div class="card-body"> <div class="form-group"> <label for="nama">Name Category</label> <input type="text" class="form-control" id="name" name="name" value="{{ isset($category) ? $category->name : '' }}"> </div> </div> <div class="card-footer"> <button type="submit" class="btn btn-primary">Save</button> </div> </div> </div> </div> </form> @endsectionresources/views/category/index.blade.php
//resources/views/category/index.blade.php @extends('layouts.app') @section('title', 'Data Category') @section('contents') <div class="card shadow mb-4"> <div class="card-header py-3"> <h6 class="m-0 font-weight-bold text-primary">Data Category</h6> </div> <div class="card-body"> <a href="{{ route('category.add') }}" class="btn btn-primary mb-3">Add Category</a> <div class="table-responsive"> <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> <thead> <tr> <th>No</th> <th>Name Category</th> <th>Action</th> </tr> </thead> <tbody> @php($no = 1) @foreach ($category as $row) <tr> <th>{{ $no++ }}</th> <td>{{ $row->name }}</td> <td> <a href="{{ route('category.edit', $row->id) }}" class="btn btn-warning">Edit</a> <a href="{{ route('category.delete', $row->id) }}" class="btn btn-danger">Delete</a> </td> </tr> @endforeach </tbody> </table> </div> </div> </div> @endsectionRoutes
routes/web.php
//routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\AuthController; use App\Http\Controllers\CategoryController; 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('add', 'add')->name('products.add'); Route::post('add', 'save')->name('products.save'); Route::get('edit/{id}', 'edit')->name('products.edit'); Route::post('edit/{id}', 'update')->name('products.update'); Route::get('delete/{id}', 'delete')->name('products.delete'); }); Route::controller(CategoryController::class)->prefix('category')->group(function () { Route::get('', 'index')->name('category'); Route::get('add', 'add')->name('category.add'); Route::post('save', 'save')->name('category.save'); Route::get('edit/{id}', 'edit')->name('category.edit'); Route::post('edit/{id}', 'update')->name('category.update'); Route::get('delete/{id}', 'delete')->name('category.delete'); }); });Run C:\xampp\htdocs\laravel\my-app>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000