Download Laravel App
https://laravel.com/docs/11.x/installation
composer global require laravel/installer
C:\xampp\htdocs\laravel11\myapp>composer global require laravel/installer
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=laravel11dev
DB_USERNAME=root
DB_PASSWORD=root
Install Laravel Breeze
https://laravel.com/docs/11.x/starter-kits#laravel-breeze
composer require laravel/breeze --dev
Database Migration
Edit database/migrations/create_users_table.php
//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(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('usertype')->default('user');
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
};
run this migration C:\xampp\htdocs\laravel\laravel11\myapp>php artisan migrate
Create middleware Admin
php artisan make:middleware Admin
C:\xampp\htdocs\laravel\laravel11\myapp>php artisan make:middleware Admin
app\Http\Middleware\Admin.php add code
//app\Http\Middleware\Admin.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Symfony\Component\HttpFoundation\Response;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (Auth::user()->usertype != 'admin') {
return redirect('dashboard');
}
return $next($request);
}
}
Edit bootstrap\app.php
// bootstrap\app.php
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'admin' => \App\Http\Middleware\Admin::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
Edit and update code app\Http\Auth\AuthenticatedSessionController.php
//app\Http\Auth\AuthenticatedSessionController.php
<?php
namespace App\Http\Controllers\Auth;
class AuthenticatedSessionController extends Controller
{
/**
* Handle an incoming authentication request.
*/
public function store(LoginRequest $request): RedirectResponse
{
$request->authenticate();
$request->session()->regenerate();
if ($request->user()->usertype == 'admin') {
return redirect('admin/dashboard');
}
//return redirect()->intended(route('dashboard', absolute: false));
return redirect()->intended(route('dashboard'));
}
}
Create Controller php artisan make:controller HomeController
C:\xampp\htdocs\laravel\laravel10project>php artisan make:controller HomeController
app\Http\Controllers\HomeController.php
//app\Http\Controllers\HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
return view('admin.dashboard');
}
}
Database Migration product C:\xampp\htdocs\laravel\laravel11\myapp>php artisan make:model Product -mc
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
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->string('category');
$table->integer('price');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('products');
}
};
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 $table = 'products';
protected $fillable = [
'title',
'category',
'price',
];
}
run this migration C:\xampp\htdocs\laravel\laravel11\myapp>php artisan migrate
Create Controller
php artisan make:controller ProductController
C:\xampp\htdocs\laravel\laravel10project>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 App\Models\Product;
class ProductController extends Controller
{
public function index()
{
$products = Product::orderBy('id', 'desc')->get();
$total = Product::count();
return view('admin.product.home', compact(['products', 'total']));
}
public function create()
{
return view('admin.product.create');
}
public function save(Request $request)
{
$validation = $request->validate([
'title' => 'required',
'category' => 'required',
'price' => 'required',
]);
$data = Product::create($validation);
if ($data) {
session()->flash('success', 'Product Add Successfully');
return redirect(route('admin/products'));
} else {
session()->flash('error', 'Some problem occure');
return redirect(route('admin.products/create'));
}
}
public function edit($id)
{
$products = Product::findOrFail($id);
return view('admin.product.update', compact('products'));
}
public function delete($id)
{
$products = Product::findOrFail($id)->delete();
if ($products) {
session()->flash('success', 'Product Deleted Successfully');
return redirect(route('admin/products/'));
} else {
session()->flash('error', 'Product Not Delete successfully');
return redirect(route('admin/products/'));
}
}
public function update(Request $request, $id)
{
$products = Product::findOrFail($id);
$title = $request->title;
$category = $request->category;
$price = $request->price;
$products->title = $title;
$products->category = $category;
$products->price = $price;
$data = $products->save();
if ($data) {
session()->flash('success', 'Product Update Successfully');
return redirect(route('admin/products'));
} else {
session()->flash('error', 'Some problem occure');
return redirect(route('admin/products/update'));
}
}
}
Templates bootstrap cdn https://www.bootstrapcdn.com/
create folder admin new file dashboard.blade.php resources/views/admin/dashboard.blade.php
add bootstrap resources/views/layouts/app.blade.php
https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css
//resources/views/admin/dashboard.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Dashboard Admin') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900">
{{ __("You're logged in!") }}
<p><a href="products" class="btn btn-primary">Products</a></p>
</div>
</div>
</div>
</div>
</x-app-layout>
resources/views/admin/product/home.blade.php
// resources/views/admin/product/home.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Admin Product') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900">
<div class="d-flex align-items-center justify-content-between">
<h1 class="mb-0">List Product</h1>
<a href="{{ route('admin/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>Category</th>
<th>Price</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@forelse ($products as $product)
<tr>
<td class="align-middle">{{ $loop->iteration }}</td>
<td class="align-middle">{{ $product->title }}</td>
<td class="align-middle">{{ $product->category }}</td>
<td class="align-middle">{{ $product->price }}</td>
<td class="align-middle">
<div class="btn-group" role="group" aria-label="Basic example">
<a href="{{ route('admin/products/edit', ['id'=>$product->id]) }}" type="button" class="btn btn-secondary">Edit</a>
<a href="{{ route('admin/products/delete', ['id'=>$product->id]) }}" type="button" class="btn btn-danger">Delete</a>
</div>
</td>
</tr>
@empty
<tr>
<td class="text-center" colspan="5">Product not found</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</x-app-layout>
resources/views/admin/product/create.blade.php
// resources/views/admin/product/create.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Create Product') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900">
<h1 class="mb-0">Add Product</h1>
<hr />
@if (session()->has('error'))
<div>
{{session('error')}}
</div>
@endif
<p><a href="{{ route('admin/products') }}" class="btn btn-primary">Go Back</a></p>
<form action="{{ route('admin/products/save') }}" 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">
@error('title')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row mb-3">
<div class="col">
<input type="text" name="category" class="form-control" placeholder="Category">
@error('category')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row mb-3">
<div class="col">
<input type="text" name="price" class="form-control" placeholder="Price">
@error('price')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row">
<div class="d-grid">
<button class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</x-app-layout>
resources/views/admin/product/update.blade.php
//resources/views/admin/product/update.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Edit Product') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 text-gray-900">
<h1 class="mb-0">Edit Product</h1>
<hr />
<form action="{{ route('admin/products/update', $products->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col mb-3">
<label class="form-label">Product Name</label>
<input type="text" name="title" class="form-control" placeholder="Title" value="{{$products->title}}">
@error('title')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row">
<div class="col mb-3">
<label class="form-label">Category</label>
<input type="text" name="category" class="form-control" placeholder="Category" value="{{$products->category}}">
@error('category')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row">
<div class="col mb-3">
<label class="form-label">Price</label>
<input type="text" name="price" class="form-control" placeholder="Product Price" value="{{$products->price}}">
@error('price')
<span class="text-danger">{{$message}}</span>
@enderror
</div>
</div>
<div class="row">
<div class="d-grid">
<button class="btn btn-warning">Update</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</x-app-layout>
Routes routes/web.php
//routes/web.php
<?php
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
use App\Http\Controllers\ProductController;
Route::get('/', function () {
return view('welcome');
});
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
Route::middleware(['auth', 'admin'])->group(function () {
Route::get('admin/dashboard', [HomeController::class, 'index']);
Route::get('/admin/products', [ProductController::class, 'index'])->name('admin/products');
Route::get('/admin/products/create', [ProductController::class, 'create'])->name('admin/products/create');
Route::post('/admin/products/save', [ProductController::class, 'save'])->name('admin/products/save');
Route::get('/admin/products/edit/{id}', [ProductController::class, 'edit'])->name('admin/products/edit');
Route::put('/admin/products/edit/{id}', [ProductController::class, 'update'])->name('admin/products/update');
Route::get('/admin/products/delete/{id}', [ProductController::class, 'delete'])->name('admin/products/delete');
});
require __DIR__.'/auth.php';
//Route::get('admin/dashboard', [HomeController::class, 'index']);
//Route::get('admin/dashboard', [HomeController::class, 'index'])->middleware(['auth', 'admin']);
Run C:\xampp\htdocs\laravel\laravel11\myapp>php artisan serve Starting Laravel development server: http://127.0.0.1:8000
