🔧 Что нужно для начала
Перед тем как приступить к разработке, убедитесь, что у вас установлены:
- PHP >= 8.1
- Composer
- Laravel (последняя версия)
- MySQL или PostgreSQL
- Node.js и npm (для фронтенда)
- Laravel Mix / Vite (для сборки фронтенда)
Вы можете установить Laravel с помощью Composer:
composer create-project laravel/laravel shop
cd shop
🗂️ Архитектура интернет-магазина
Прежде чем писать код, определим основные модули интернет-магазина:
- Каталог товаров
- Карточка товара
- Корзина
- Оформление заказа
- Панель администратора
- Аутентификация пользователей
- Оплата (например, Stripe, PayPal)
- Email-уведомления
Шаг 1: Настройка базы данных
Откройте файл .env
и настройте параметры подключения к базе данных:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=shop
DB_USERNAME=root
DB_PASSWORD=
Создайте БД:
CREATE DATABASE shop;
Шаг 2: Создание моделей и миграций
Создадим базовые сущности: Product, Category, User, Order, OrderItem, Cart.
php artisan make:model Product -m
php artisan make:model Category -m
php artisan make:model Order -m
php artisan make:model OrderItem -m
php artisan make:model Cart -m
Пример миграции products
:
public function up()
{
Schema::create(‘products’, function (Blueprint $table) {
$table->id();
$table->string(‘name’);
$table->text(‘description’)->nullable();
$table->decimal(‘price’, 10, 2);
$table->unsignedBigInteger(‘category_id’);
$table->string(‘image’)->nullable();
$table->timestamps();$table->foreign(‘category_id’)->references(‘id’)->on(‘categories’);
});
}
Аналогично создаём миграции для других таблиц.
Запускаем миграции:
php artisan migrate
Шаг 3: Роутинг и контроллеры
Создадим контроллеры:
php artisan make:controller ProductController
php artisan make:controller CartController
php artisan make:controller OrderController
php artisan make:controller Admin/ProductController —resource
Пример маршрутов (routes/web.php
):
use App\Http\Controllers\ProductController;
use App\Http\Controllers\CartController;
use App\Http\Controllers\OrderController;Route::get(‘/’, [ProductController::class, ‘index’]);
Route::get(‘/product/{id}’, [ProductController::class, ‘show’]);Route::post(‘/cart/add’, [CartController::class, ‘add’]);
Route::get(‘/cart’, [CartController::class, ‘index’]);
Route::post(‘/cart/remove’, [CartController::class, ‘remove’]);Route::get(‘/checkout’, [OrderController::class, ‘checkout’])->middleware(‘auth’);
Route::post(‘/order’, [OrderController::class, ‘placeOrder’])->middleware(‘auth’);
Шаг 4: Каталог товаров
В ProductController
:
public function index()
{
$products = Product::all();
return view(‘products.index’, compact(‘products’));
}public function show($id)
{
$product = Product::findOrFail($id);
return view(‘products.show’, compact(‘product’));
}
Создайте представления в resources/views/products/
:
index.blade.php
show.blade.php
Шаг 5: Корзина и оформление заказа
Для корзины можно использовать сессии:
public function add(Request $request)
{
$cart = session()->get(‘cart’, []);
$productId = $request->input(‘product_id’);
$quantity = $request->input(‘quantity’, 1);if (isset($cart[$productId])) {
$cart[$productId][‘quantity’] += $quantity;
} else {
$product = Product::findOrFail($productId);
$cart[$productId] = [
‘name’ => $product->name,
‘price’ => $product->price,
‘quantity’ => $quantity,
];
}session()->put(‘cart’, $cart);
return redirect()->back()->with(‘success’, ‘Товар добавлен в корзину!’);
}
Шаг 6: Оформление заказа
public function placeOrder(Request $request)
{
$cart = session(‘cart’);
if (!$cart) {
return redirect()->back()->with(‘error’, ‘Корзина пуста!’);
}$order = new Order();
$order->user_id = auth()->id();
$order->total = collect($cart)->sum(fn($item) => $item[‘price’] * $item[‘quantity’]);
$order->save();foreach ($cart as $productId => $item) {
OrderItem::create([
‘order_id’ => $order->id,
‘product_id’ => $productId,
‘quantity’ => $item[‘quantity’],
‘price’ => $item[‘price’],
]);
}session()->forget(‘cart’);
return redirect(‘/’)->with(‘success’, ‘Заказ оформлен!’);
}
Шаг 7: Аутентификация
Laravel Breeze или Jetstream:
composer require laravel/breeze —dev
php artisan breeze:install
npm install && npm run dev
php artisan migrate
Шаг 8: Админ-панель
Создайте роуты в routes/web.php
:
Route::middleware([‘auth’, ‘admin’])->prefix(‘admin’)->group(function () {
Route::resource(‘products’, \App\Http\Controllers\Admin\ProductController::class);
});
Создайте middleware admin
:
php artisan make:middleware AdminMiddleware
public function handle($request, Closure $next)
{
if (!auth()->check() || !auth()->user()->is_admin) {
abort(403);
}return $next($request);
}
Шаг 9: Подключение оплаты (например, Stripe)
Установите Stripe SDK:
composer require stripe/stripe-php
Создайте сервис оплаты и интегрируйте Stripe Checkout.
Шаг 10: Email уведомления
Используем встроенные уведомления Laravel:
php artisan make:notification OrderPlaced
В OrderController
после оформления заказа:
auth()->user()->notify(new OrderPlaced($order));
Дополнительно
- SEO (мета-теги, Sitemap)
- Фильтры и поиск
- Статистика
- Мобильная адаптация
- Vue.js / React для SPA
Заключение
Создание интернет-магазина на Laravel — это процесс, включающий в себя как backend, так и frontend разработку. Laravel предлагает мощные и удобные инструменты, которые позволяют быстро разрабатывать качественные e-commerce проекты.
Если вы только начинаете, можно использовать готовые пакеты, такие как: