首页 > 文章列表 > 创建一个电子商务网站,使用Yii框架

创建一个电子商务网站,使用Yii框架

Yii框架 创建 电商网站
135 2024-03-26

电子商务网站在现代商业中扮演着越来越重要的角色,它为商家和消费者之间建立了一个便捷的交流平台,帮助商家扩大销售渠道,提高效率,提高产品品质,满足消费者需求。为了打造一个成功的电子商务网站,良好的网站框架是必不可少的。Yii框架被广泛应用于电子商务网站开发中,因为它具有强大的性能、出色的可扩展性和完善的安全性能。本文将介绍如何使用Yii框架创建一个高质量的电子商务网站。

一、Yii框架简介

Yii框架是一个基于PHP的高性能、高效率的Web应用框架。它是一个免费的开源框架,它的代码规范、可扩展性以及开发效率方面非常出色。Yii框架被广泛应用于电子商务网站开发、博客和论坛建设等领域。Yii框架是一款基于MVC模式设计的框架,提供了诸如Active Record、模板引擎、认证、缓存等众多功能和组件。

二、安装Yii框架

使用Yii框架创建电子商务网站前,需要先安装Yii框架。

1.下载Yii框架,可以从Yii官网上下载,也可以使用composer进行安装:

composer create-project --prefer-dist yiisoft/yii2-app-basic basic

2.在本地搭建Web服务器,例如Apache、Nginx等。

3.将Yii框架文件解压缩到Web服务器根目录。

4.访问Web服务器并验证Yii框架安装是否成功。

三、创建Yii框架电子商务网站

创建Yii框架电子商务网站需要遵循以下步骤:

1.建立数据库

在创建电子商务网站之前,需要先建立数据库。可以使用MySQL或者其他关系型数据库。

2.创建Yii应用

使用Yii命令行工具来创建Yii应用:

yii new myapp

其中,myapp为应用的名字。使用此命令会在当前目录下创建一个名为myapp的Yii应用文件夹。

3.设置数据库连接

根据需要配置数据库连接。编辑myapp/config/db.php文件,设置数据库连接相关信息。例如:

return [
    'class' => 'yiidbConnection',
    'dsn' => 'mysql:host=localhost;dbname=mydatabase',
    'username' => 'root',
    'password' => 'password',
    'charset' => 'utf8',
];

其中,mydatabase、root、password分别为数据库名、用户名、密码。

4.创建网站模块

在Yii应用中,一个控制器可以包含多个操作方法,而一个模块可以包含多个控制器。将电子商务网站的各个模块封装成各自的控制器,这样可以使代码更加清晰,结构更加简单。使用Yii命令行工具来创建一个网站模块,例如:

yii gii/module --moduleClass=appmodulesshopModule

其中,Module是模块名称。

5.创建网站首页

在Yii中,网站首页是通过控制器和视图来实现的。创建控制器,例如:

namespace appcontrollers;
use yiiwebController;
class SiteController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}

在views/site目录下创建视图文件index.php,例如:

<?php
use yiihelpersHtml;
?>
<h1>Welcome to my Yii-powered shop!</h1>
<?= Html::encode($message) ?>

在页面上会显示“Welcome to my Yii-powered shop!”和$message的值。

6.创建产品列表

在电子商务网站中,一个非常重要的页面就是产品列表。使用Gridview来创建产品列表非常方便。在控制器中,使用yiidataActiveDataProvider类来获取和显示数据库中的产品信息,例如:

namespace appcontrollers;
use yiiwebController;
use yiidataActiveDataProvider;
use appmodelsProducts;
class ProductsController extends Controller
{
    public function actionIndex()
    {
        $dataProvider = new ActiveDataProvider([
            'query' => Products::find(),
        ]);
        return $this->render('index', [
            'dataProvider' => $dataProvider,
        ]);
    }
}

在views/products目录下创建视图文件index.php,显示产品列表,例如:

<?php
use yiigridGridView;
?>
<h1>Products</h1>
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'name',
        'description:ntext',
        'created_at',
        'updated_at',
        ['class' => 'yiigridActionColumn'],
    ],
]); ?>

在页面上会显示所有产品的详细信息,包括ID、名称、描述、创建时间等。

7.创建产品详情

在电子商务网站中,为方便消费者查看产品详细信息,需要为每个产品创建一个详细信息页面。使用Detailview创建该页面非常方便。在控制器中,使用yiidataActiveDataProvider类获取和显示数据库中的产品信息,例如:

namespace appcontrollers;
use yiiwebController;
use yiidataActiveDataProvider;
use appmodelsProducts;
class ProductsController extends Controller
{
    public function actionView($id)
    {
        $model = Products::findOne($id);
        return $this->render('view', [
            'model' => $model,
        ]);
    }
}

在views/products目录下创建视图文件view.php,显示产品详细信息,例如:

<?php
use yiiwidgetsDetailView;
?>
<h1><?= $model->name ?></h1>
<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'id',
        'name',
        'description:ntext',
        'created_at',
        'updated_at',
    ],
]) ?>

在页面上会显示产品的详细信息,包括ID、名称、描述、创建时间等。

8.创建购物车

在电子商务网站中,一个购物车是非常必要的组件。在实现购物车时,需要使用Yii::$app->session来保存购物车信息。在控制器中实现购物车,例如:

namespace appcontrollers;
use Yii;
use yiiwebController;
use appmodelsProducts;
class CartController extends Controller
{
    public function actionAdd($id)
    {
        $product = Products::findOne($id);
        if ($product) {
            $cart = Yii::$app->session->get('cart', []);
            if (isset($cart[$id])) {
                $cart[$id]['amount']++;
            } else {
                $cart[$id] = [
                    'product' => $product,
                    'amount' => 1,
                ];
            }
            Yii::$app->session->set('cart', $cart);
        }
        return $this->redirect(['cart/index']);
    }
    public function actionIndex()
    {
        $cart = Yii::$app->session->get('cart', []);
        return $this->render('index', [
            'cart' => $cart,
        ]);
    }
}

在views/cart目录下创建视图文件index.php,显示购物车内容,例如:

<?php
use yiihelpersHtml;
?>
<h1>Shopping Cart</h1>
<?php if (empty($cart)): ?>
    <p>Your cart is currently empty.</p>
<?php else: ?>
    <table class="table">
        <thead><tr><th>Product</th><th>Amount</th><th>Price</th><th>Total</th></tr></thead>
        <tbody>
        <?php $total = 0; ?>
        <?php foreach ($cart as $id => $item): ?>
            <?php $product = $item['product']; ?>
            <?php $amount = $item['amount']; ?>
            <?php $subtotal = $product->price * $amount; ?>
            <tr>
                <td><?= Html::encode($product->name) ?></td>
                <td><?= Html::encode($amount) ?></td>
                <td>$<?= Html::encode($product->price) ?></td>
                <td>$<?= Html::encode($subtotal) ?></td>
            </tr>
            <?php $total += $subtotal; ?>
        <?php endforeach; ?>
        </tbody>
        <tfoot><tr><th colspan="3">Total</th><td><?= '$' . number_format($total, 2) ?></td></tr></tfoot>
    </table>
<?php endif; ?>

在页面上会显示购物车中的产品数量、单价、总价等信息。

9.创建订单

在消费者完成购物之后,需要提交订单。在控制器中,使用Yii::$app->mailer来发送确认邮件以及通知邮件。另外,使用Yii::$app->db->transaction来创建订单和保存支付状态。例如:

namespace appcontrollers;
use Yii;
use yiiwebController;
use yiihelpersUrl;
use yiiwebHttpException;
use appmodelsProducts;
class OrderController extends Controller
{
    public function actionBuy()
    {
        $cart = Yii::$app->session->get('cart', []);
        if (empty($cart)) {
            throw new HttpException(404, 'Your cart is empty!');
        }
        $transaction = Yii::$app->db->beginTransaction(); //开启数据库事务
        try {
            //创建订单
            $order = new ppmodelsOrders();
            $order->customer_id = Yii::$app->user->id;
            $order->total_cost = 0;
            $order->created_time = date('Y-m-d H:i:s');
            $order->status = 0;
            $order->save();
            //保存订单中的产品信息
            foreach ($cart as $id => $item) {
                $product = Products::findOne($id);
                $orderLine = new ppmodelsOrderLines();
                $orderLine->order_id = $order->id;
                $orderLine->product_id = $product->id;
                $orderLine->name = $product->name;
                $orderLine->description = $product->description;
                $orderLine->amount = $item['amount'];
                $orderLine->price = $product->price;
                $orderLine->sub_total = $product->price * $item['amount'];
                $orderLine->save();
                $order->total_cost += $orderLine->sub_total;
            }
            $order->save();
            $transaction->commit(); //提交数据库事务
            $email = Yii::$app->mailer->compose('order-confirm', [
                'order' => $order,
            ]);
            $email->setFrom(Yii::$app->params['adminEmail'])
                ->setTo(Yii::$app->user->identity->email)
                ->setSubject('Order Confirm')
                ->send(); //发送确认邮件
            $email = Yii::$app->mailer->compose('order-notify', [
                'order' => $order,
                'url' => Url::to(['admin/order/detail', 'id' => $order->id], true),
            ]);
            $email->setFrom(Yii::$app->params['adminEmail'])
                ->setTo(Yii::$app->params['adminEmail'])
                ->setSubject('New Order')
                ->send(); //发送通知邮件
            Yii::$app->session->remove('cart'); //清除购物车
            return $this->render('success', [
                'order' => $order,
            ]);
        } catch (Exception $e) {
            $transaction->rollBack(); //回滚数据库事务
            throw new HttpException(500, 'An error occurred.');
        }
    }
}

在views/order目录下创建视图文件success.php,显示提交订单成功的页面,例如:

<?php
use yiihelpersHtml;
?>
<h1>Success</h1>
<p>Your order has been submitted successfully.</p>
<p>Total cost: $<?= number_format($order->total_cost, 2) ?></p>
<?= Html::a('View order detail', ['order/detail', 'id' => $order->id]) ?>

在页面上会显示订单提交成功的信息、订单总价和订单详细信息的链接。

四、总结

使用Yii框架创建电子商务网站有很多好处,其中最重要的是可以大大提高开发效率和性能,并减少错误出现的机会。在此介绍了使用Yii框架创建电子商务网站的基本步骤,包括安装Yii框架、设置数据库连接、创建网站模块、创建产品列表、创建购物车、创建订单等。通过学习这些内容,相信读者可以更好地掌握Yii框架的用法,从而打造出更加优秀的电子商务网站。