本博客部分代碼來源於開源項目funshop
一、 使用ArrayHelper::map, Yii2.0 自帶的強大的數組助手類。
在多次開發經驗中我們可以發現控制器中花費大量代碼在處理數組函數,爲了更好的傳遞數據給View。這也是個人感覺的MVC模式一個小缺點,當你把數據和程序分開有好也有壞,傳遞轉換的過程實際上也是一種資源的浪費。Yii2.0 強大的數組助手類協助代碼更加簡潔的完成這些功能。
以下是官方文檔給出的該function的文檔:
建立哈希表
爲了從一個多維數組或者一個對象數組中建立一個映射表(鍵值對),你可以使用 map方法.
$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,
];
}