I'll help you set up a multi-vendor store with Laravel. Here's the initial setup with the basic structure and multilingual support:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Store;
use App\Models\Product;
use App\Models\Order;
use App\Models\Admin;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class AdminController extends Controller
{
public function index()
{
return view('admin_dashboard');
}
}
class StoreOwnerController extends Controller
{
public function index(Store $store)
{
return view('store_owner_dashboard', compact('store'));
}
}
class ProductController extends Controller
{
public function index(Store $store)
{
return view('manage_product', compact('store'));
}
}
class UserController extends Controller
{
public function index()
{
return view('user_dashboard');
}
}
class AuthController extends Controller
{
public function login(Request $request)
{
// Login logic
}
public function register(Request $request)
{
// Registration logic
}
public function changeLanguage($locale)
{
App::setLocale($locale);
Session::put('locale', $locale);
return redirect()->back();
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Store;
use App\Models\Product;
use App\Models\Order;
use App\Models\Admin;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class AdminController extends Controller
{
public function index()
{
return view('admin_dashboard');
}
}
class StoreOwnerController extends Controller
{
public function index(Store $store)
{
return view('store_owner_dashboard', compact('store'));
}
}
class ProductController extends Controller
{
public function index(Store $store)
{
return view('manage_product', compact('store'));
}
}
class UserController extends Controller
{
public function index()
{
return view('user_dashboard');
}
}
class AuthController extends Controller
{
public function login(Request $request)
{
// Login logic
}
public function register(Request $request)
{
// Registration logic
}
public function changeLanguage($locale)
{
App::setLocale($locale);
Session::put('locale', $locale);
return redirect()->back();
}
}
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\StoreOwnerController;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\AuthController;
Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
Route::get('/store/{store}/owner/dashboard', [StoreOwnerController::class, 'index'])->name('store.owner.dashboard');
Route::get('/store/{store}/product', [ProductController::class, 'index'])->name('store.product');
Route::get('/user/dashboard', [UserController::class, 'index'])->name('user.dashboard');
Route::post('/login', [AuthController::class, 'login'])->name('login');
Route::post('/register', [AuthController::class, 'register'])->name('register');
Route::get('/change-language/{locale}', [AuthController::class, 'changeLanguage'])->name('change.language');
// routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\StoreOwnerController;
use App\Http\Controllers\ProductController;
use App\Http\Controllers\UserController;
use App\Http\Controllers\AuthController;
Route::get('/admin/dashboard', [AdminController::class, 'index'])->name('admin.dashboard');
Route::get('/store/{store}/owner/dashboard', [StoreOwnerController::class, 'index'])->name('store.owner.dashboard');
Route::get('/store/{store}/product', [ProductController::class, 'index'])->name('store.product');
Route::get('/user/dashboard', [UserController::class, 'index'])->name('user.dashboard');
Route::post('/login', [AuthController::class, 'login'])->name('login');
Route::post('/register', [AuthController::class, 'register'])->name('register');
Route::get('/change-language/{locale}', [AuthController::class, 'changeLanguage'])->name('change.language');
For multilingual support, you'll need to:
resources/lang/ (en and ar folders)<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
public function handle($request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;
class Localization
{
public function handle($request, Closure $next)
{
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
protected $middlewareGroups = [
'web' => [
// Other middleware...
\App\Http\Middleware\Localization::class,
],
];
protected $middlewareGroups = [
'web' => [
// Other middleware...
\App\Http\Middleware\Localization::class,
],
];
{{ __('messages.welcome') }} where messages are defined in lang files.Would you like me to provide the model implementations or any specific part in more detail?___
I'll provide a comprehensive structure for your Laravel project with all the necessary files and directories. Here's the complete setup:
<?php
// app/Http/Controllers/Auth/LoginController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('/');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
<?php
// app/Http/Controllers/Auth/LoginController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class LoginController extends Controller
{
public function showLoginForm()
{
return view('auth.login');
}
public function login(Request $request)
{
$credentials = $request->validate([
'email' => 'required|email',
'password' => 'required',
]);
if (Auth::attempt($credentials)) {
$request->session()->regenerate();
return redirect()->intended('/');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
}
// app/Http/Controllers/Auth/RegisterController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class RegisterController extends Controller
{
public function showRegistrationForm()
{
return view('auth.register');
}
public function register(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
'role' => 'required|in:admin,store_owner,customer',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
'role' => $validated['role'],
]);
Auth::login($user);
return redirect('/');
}
}
// app/Http/Controllers/Auth/RegisterController.php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class RegisterController extends Controller
{
public function showRegistrationForm()
{
return view('auth.register');
}
public function register(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
'role' => 'required|in:admin,store_owner,customer',
]);
$user = User::create([
'name' => $validated['name'],
'email' => $validated['email'],
'password' => Hash::make($validated['password']),
'role' => $validated['role'],
]);
Auth::login($user);
return redirect('/');
}
}
// app/Http/Controllers/Admin/DashboardController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Store;
use App\Models\User;
use App\Models\Order;
class DashboardController extends Controller
{
public function index()
{
$stats = [
'users' => User::count(),
'stores' => Store::count(),
'orders' => Order::count(),
];
return view('admin.dashboard', compact('stats'));
}
}
// app/Http/Controllers/Admin/DashboardController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Store;
use App\Models\User;
use App\Models\Order;
class DashboardController extends Controller
{
public function index()
{
$stats = [
'users' => User::count(),
'stores' => Store::count(),
'orders' => Order::count(),
];
return view('admin.dashboard', compact('stats'));
}
}
// app/Http/Controllers/Admin/PlanController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Plan;
use Illuminate\Http\Request;
class PlanController extends Controller
{
public function index()
{
$plans = Plan::all();
return view('admin.plans.index', compact('plans'));
}
public function create()
{
return view('admin.plans.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required',
'price' => 'required|numeric',
'duration' => 'required|integer',
'features' => 'required',
]);
Plan::create($validated);
return redirect()->route('admin.plans.index');
}
}
// app/Http/Controllers/Admin/PlanController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Plan;
use Illuminate\Http\Request;
class PlanController extends Controller
{
public function index()
{
$plans = Plan::all();
return view('admin.plans.index', compact('plans'));
}
public function create()
{
return view('admin.plans.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required',
'price' => 'required|numeric',
'duration' => 'required|integer',
'features' => 'required',
]);
Plan::create($validated);
return redirect()->route('admin.plans.index');
}
}
// app/Http/Controllers/Admin/StoreController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Store;
use Illuminate\Http\Request;
class StoreController extends Controller
{
public function index()
{
$stores = Store::with('owner')->get();
return view('admin.stores.index', compact('stores'));
}
public function show(Store $store)
{
return view('admin.stores.show', compact('store'));
}
public function updateStatus(Request $request, Store $store)
{
$validated = $request->validate([
'status' => 'required|in:active,inactive',
]);
$store->update($validated);
return back();
}
}
// app/Http/Controllers/Admin/StoreController.php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Store;
use Illuminate\Http\Request;
class StoreController extends Controller
{
public function index()
{
$stores = Store::with('owner')->get();
return view('admin.stores.index', compact('stores'));
}
public function show(Store $store)
{
return view('admin.stores.show', compact('store'));
}
public function updateStatus(Request $request, Store $store)
{
$validated = $request->validate([
'status' => 'required|in:active,inactive',
]);
$store->update($validated);
return back();
}
}
// app/Http/Controllers/StoreOwner/DashboardController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Models\Product;
class DashboardController extends Controller
{
public function index()
{
$products = Product::where('store_id', auth()->user()->store->id)->count();
$orders = Order::where('store_id', auth()->user()->store->id)->count();
return view('store-owner.dashboard', compact('products', 'orders'));
}
}
// app/Http/Controllers/StoreOwner/DashboardController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Models\Product;
class DashboardController extends Controller
{
public function index()
{
$products = Product::where('store_id', auth()->user()->store->id)->count();
$orders = Order::where('store_id', auth()->user()->store->id)->count();
return view('store-owner.dashboard', compact('products', 'orders'));
}
}
// app/Http/Controllers/StoreOwner/ProductController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
$products = Product::where('store_id', auth()->user()->store->id)->get();
return view('store-owner.products.index', compact('products'));
}
public function create()
{
return view('store-owner.products.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required',
'description' => 'required',
'price' => 'required|numeric',
'quantity' => 'required|integer',
]);
$validated['store_id'] = auth()->user()->store->id;
Product::create($validated);
return redirect()->route('store-owner.products.index');
}
}
// app/Http/Controllers/StoreOwner/ProductController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
public function index()
{
$products = Product::where('store_id', auth()->user()->store->id)->get();
return view('store-owner.products.index', compact('products'));
}
public function create()
{
return view('store-owner.products.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required',
'description' => 'required',
'price' => 'required|numeric',
'quantity' => 'required|integer',
]);
$validated['store_id'] = auth()->user()->store->id;
Product::create($validated);
return redirect()->route('store-owner.products.index');
}
}
// app/Http/Controllers/StoreOwner/OrderController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Order;
class OrderController extends Controller
{
public function index()
{
$orders = Order::where('store_id', auth()->user()->store->id)->get();
return view('store-owner.orders.index', compact('orders'));
}
public function updateStatus(Request $request, Order $order)
{
$validated = $request->validate([
'status' => 'required|in:pending,processing,completed,cancelled',
]);
$order->update($validated);
return back();
}
}
// app/Http/Controllers/StoreOwner/OrderController.php
namespace App\Http\Controllers\StoreOwner;
use App\Http\Controllers\Controller;
use App\Models\Order;
class OrderController extends Controller
{
public function index()
{
$orders = Order::where('store_id', auth()->user()->store->id)->get();
return view('store-owner.orders.index', compact('orders'));
}
public function updateStatus(Request $request, Order $order)
{
$validated = $request->validate([
'status' => 'required|in:pending,processing,completed,cancelled',
]);
$order->update($validated);
return back();
}
}
// app/Http/Controllers/User/DashboardController.php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Order;
class DashboardController extends Controller
{
public function index()
{
$orders = Order::where('user_id', auth()->id())->get();
return view('user.dashboard', compact('orders'));
}
}
// app/Http/Controllers/User/DashboardController.php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Order;
class DashboardController extends Controller
{
public function index()
{
$orders = Order::where('user_id', auth()->id())->get();
return view('user.dashboard', compact('orders'));
}
}
// app/Http/Controllers/User/OrderController.php
namespace_
// app/Http/Controllers/User/OrderController.php
namespace_