Создание интернет-магазина — задача, с которой рано или поздно сталкивается каждый веб-разработчик. Yii2 — это мощный PHP-фреймворк, который отлично подходит для таких проектов. В этой статье я поделюсь опытом разработки магазина на Yii2, покажу примеры кода и дам практические советы.

Digital-студия WNDER

Почему Yii2 для интернет-магазина?

Yii2 — это быстрый, безопасный и хорошо документированный фреймворк. Он имеет встроенную поддержку кэширования, миграций, аутентификации и многих других функций, необходимых для электронной коммерции. Кроме того, Yii2 использует шаблон проектирования MVC, что упрощает поддержку кода.

Вот основные преимущества Yii2:

  • Высокая производительность благодаря ленивой загрузке.
  • Гибкая система миграций для управления базой данных.
  • Встроенные инструменты для работы с формами и валидацией.
  • Большое сообщество и множество расширений.

Правило: Всегда используйте миграции для изменения структуры базы данных. Это позволит легко разворачивать проект на разных серверах и отслеживать изменения.

Проектирование базы данных

Для интернет-магазина потребуются таблицы: товары, категории, заказы, пользователи, корзина. Рассмотрим структуру на примере таблицы товаров.

Создадим миграцию для таблицы товаров:

createTable('{{%product}}', [
            'id' => $this->primaryKey(),
            'name' => $this->string()->notNull(),
            'description' => $this->text(),
            'price' => $this->decimal(10, 2)->notNull(),
            'category_id' => $this->integer(),
            'created_at' => $this->integer(),
            'updated_at' => $this->integer(),
        ]);

        $this->createIndex('idx-product-category_id', '{{%product}}', 'category_id');
        $this->addForeignKey('fk-product-category_id', '{{%product}}', 'category_id', '{{%category}}', 'id', 'SET NULL', 'CASCADE');
    }

    public function safeDown()
    {
        $this->dropTable('{{%product}}');
    }
}

После создания миграции выполните команду php yii migrate в консоли.

Для удобства работы с товарами создадим модель Product:

 255],
        ];
    }

    public function getCategory()
    {
        return $this->hasOne(Category::class, ['id' => 'category_id']);
    }
}

Создание контроллеров и представлений

Контроллер — это сердце приложения. Он обрабатывает запросы и возвращает ответы. Создадим контроллер для каталога товаров.

all();
        return $this->render('index', ['products' => $products]);
    }

    public function actionView($id)
    {
        $product = Product::findOne($id);
        if (!$product) {
            throw new \yii\web\NotFoundHttpException('Товар не найден.');
        }
        return $this->render('view', ['product' => $product]);
    }
}

Теперь создадим представление для отображения списка товаров. Файл views/catalog/index.php:

Каталог товаров

name, ['view', 'id' => $product->id]) ?>

price ?> руб.

Не забудьте подключить хелпер Html в начале файла.

Лайфхак: Используйте yii\widgets\ListView для автоматической пагинации и сортировки. Это сэкономит время и уменьшит количество кода.

Корзина и оформление заказа

Корзина — ключевой компонент интернет-магазина. Реализуем её с помощью сессий. Создадим компонент Cart.

items = Yii::$app->session->get('cart', []);
    }

    public function add($id, $quantity = 1)
    {
        if (isset($this->items[$id])) {
            $this->items[$id] += $quantity;
        } else {
            $this->items[$id] = $quantity;
        }
        Yii::$app->session->set('cart', $this->items);
    }

    public function getItems()
    {
        $products = [];
        foreach ($this->items as $id => $quantity) {
            $product = Product::findOne($id);
            if ($product) {
                $products[] = ['product' => $product, 'quantity' => $quantity];
            }
        }
        return $products;
    }

    public function getTotal()
    {
        $total = 0;
        foreach ($this->getItems() as $item) {
            $total += $item['product']->price * $item['quantity'];
        }
        return $total;
    }
}

Зарегистрируем компонент в конфигурации приложения:

'components' => [
    'cart' => [
        'class' => 'app\components\Cart',
    ],
],

Теперь можно добавлять товары в корзину через контроллер:

public function actionAdd($id)
{
    Yii::$app->cart->add($id);
    return $this->redirect(['catalog/index']);
}

Для оформления заказа создадим модель Order и форму. После отправки формы сохраняем заказ в базу и очищаем корзину.

Полезные советы и выводы

Вот несколько рекомендаций, которые помогут избежать ошибок:

Совет Описание
Используйте RBAC Для разграничения прав доступа администратора и покупателей.
Кэшируйте данные Настройте кэширование запросов к БД и фрагментов страниц.
Валидация на клиенте и сервере Используйте ActiveForm для клиентской валидации и правила модели для серверной.

Правило: Всегда пишите тесты для критических частей приложения (корзина, оформление заказа). Это сэкономит время на отладке.

В итоге, разработка интернет-магазина на Yii2 — это задача, которая под силу даже новичку, если следовать лучшим практикам. Yii2 предоставляет все необходимые инструменты для быстрой и качественной разработки. Не бойтесь экспериментировать и использовать расширения из официального репозитория.

Надеюсь, эта статья поможет вам в создании собственного магазина. Удачи в кодинге!

Студия WNDER