yii 2.0 使用部分自带函数来优化代码

本博客部分代码来源于开源项目funshop

一、 使用ArrayHelper::map, Yii2.0 自带的强大的数组助手类。

在多次开发经验中我们可以发现控制器中花费大量代码在处理数组函数,为了更好的传递数据給View。这也是个人感觉的MVC模式一个小缺点,当你把数据和程序分开有好也有坏,传递转换的过程实际上也是一种资源的浪费。Yii2.0 强大的数组助手类协助代码更加简洁的完成这些功能。

以下是官方文档给出的该function的文档:
建立哈希表
为了从一个多维数组或者一个对象数组中建立一个映射表(键值对),你可以使用 map方法. from to 参数分别指定了欲构建的映射表的键名和属性名。 根据需要,你可以按照一个分组字段 $group 将映射表进行分组,例如,

$array = [
    ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
    ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
    ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
);

$result = ArrayHelper::map($array, 'id', 'name');
// 结果是: 
// [
//     '123' => 'aaa',
//     '124' => 'bbb',
//     '345' => 'ccc',
// ]

$result = ArrayHelper::map($array, 'id', 'name', 'class');
// 结果是:
// [
//     'x' => [
//         '123' => 'aaa',
//         '124' => 'bbb',
//     ],
//     'y' => [
//         '345' => 'ccc',
//     ],
// ]

非常清楚的可以看到这个函数的作用,就是把一个数组的值拿来自定义组成一个新数组的键和值。

二、这个是我在官方框架代码中看到的一段代码,php5引入异常类之后,代码居然在业务层面抛异常,大概是为了防止网络问题对修改密码造成的比较严重的影响吧。(个人这样认为)

 try {
      $model = new ChangePasswordForm();
} catch (InvalidParamException $e) {
      throw new BadRequestHttpException($e->getMessage());
}

但一般在系统级别上的问题才会使用抛异常,比如数据库执行连接超时,事务执行失败,php扩展加载失败等对于程序不可控的才会使用异常。

三、 网站中经常遇到的删除等按钮ajax比较规范的写法:

前端代码:

                                        <a href="javascript:;" data-link="<?= Yii::$app->urlManager->createUrl(['user/ajax-delete-favorite', 'id' => $product->id]) ?>" class="iconfont delete">删除</a>

<?php
var product = {csrf:"' . Yii::$app->request->getCsrfToken() . '"};
'); 

$js = <<<JS
jQuery(".delete").click(function(){
    var link = $(this).data('link');
    $.get(link, function(data, status) {
        if (status == "success") {
            location.reload();
        }
    });
});

php 代码:

    public function actionAjaxDeleteFavorite($id)
    {
        Yii::$app->response->format = Response::FORMAT_JSON;
        if ($id) {
            Favorite::deleteAll(['user_id' => Yii::$app->user->id, 'product_id' => $id]);
            return [
                'status' => 1,
            ];
        }
        return [
            'status' => -1,
        ];
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值