本博客部分代码来源于开源项目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,
];
}