yii2 在控制器中驗證請求參數(shù)的使用方法
寫api接口時一般會在控制器中簡單驗證參數(shù)的正確性。
使用yii只帶驗證器(因為比較熟悉)實現(xiàn)有兩種方式(效果都不佳)。
針對每個請求單獨寫個 Model , 定義驗證規(guī)則并進行驗證。 缺點:寫好多參數(shù)驗證的 Model 類。
使用 獨立驗證器 中提到的 $validator->validateValue()
方法直接驗證變量值。缺點:寫實例化很多驗證器對象。
有么有“一勞永逸”的做法,像在 Model 中通過 rules 方法定義驗證規(guī)則并實現(xiàn)快速驗證的呢?有!
使用方法(實現(xiàn)效果)
namespace frontend\controllers\api; use yii\web\Controller; use common\services\app\ParamsValidateService; class ArticleController extends Controller { // 文章列表 public function actionList() { $PVS = new ParamsValidateService(); $valid = $PVS->validate(\Yii::$app->request->get(), [ ['category_id', 'required'], ['category_id', 'integer'], ['keyword', 'string'], ]); if (!$valid) { $this->apiError(1001, $PVS->getErrorSummary(true)); } //... } // 新增文章 public function actionPost() { $PVS = new ParamsValidateService(); $valid = $PVS->validate(\Yii::$app->request->get(), [ [['category_id', 'title', 'content'], 'required'], ['category_id', 'integer'], [['title'], 'string', 'max' => 64], [['content'], 'string'], ]); if (!$valid) { $this->apiError(1001, $PVS->getErrorSummary(true)); } //... } // 文章刪除 public function actionDelete() { $PVS = new ParamsValidateService(); $valid = $PVS->validate(\Yii::$app->request->get(), [ ['article_id', 'required'], ['article_id', 'integer'], ]); if (!$valid) { $this->apiError(1001, $PVS->getErrorSummary(true)); } //... } }
實現(xiàn)方法
定義參數(shù)驗證模型
定義參數(shù)驗證模型 ParamsValidateModel
,繼承 yii\db\ActiveRecord
,重寫 attributes()
方法,主要功能:
- 驗證規(guī)則可從對象外部進行設(shè)置。
- 從驗證規(guī)則中獲取可賦值的屬性。
<?php namespace common\models\app; use yii\db\ActiveRecord; class ParamsValidateModel extends ActiveRecord { /** * @var array 驗證規(guī)則 */ private $_rules = []; private $_attributes = []; // 設(shè)置驗證規(guī)則 public function setRules($rules) { $this->_rules = $rules; foreach ($rules as $item) { $this->_attributes = array_unique(array_merge($this->_attributes, (array)$item[0])); } } // 重寫獲取驗證規(guī)則 public function rules() { return $this->_rules; } // 設(shè)置可用屬性列表 public function attributes() { return $this->_attributes; } }
定義參數(shù)驗證服務(wù)類
定義參數(shù)驗證服務(wù)類,主要功能有:
- 設(shè)置參數(shù)列表和參數(shù)規(guī)則列表。
- 使用 參數(shù)驗證模型 進行驗證和存儲驗證錯誤消息。
- 使用魔術(shù)方法獲取 參數(shù)驗證模型 中的驗證錯誤消息。
<?php namespace common\services\app; use common\models\app\ParamsValidateModel; use yii\base\Component; /** * Class ParamsValidateService * @package common\services\app * @method array getErrors(\string $attribute) * @method array getFirstErrors() * @method array getFirstError(\string $attribute) * @method array getErrorSummary(\boolean $showAllErrors) */ class ParamsValidateService extends Component { /** * @var ParamsValidateModel 模型 */ private $model = null; public function init() { parent::init(); $this->model = new ParamsValidateModel(); } /** * @param array $data 數(shù)據(jù)項 * @param array $rules 驗證規(guī)則 * @return bool */ public function validate($data, $rules) { // 添加驗證規(guī)則 $this->model->setRules($rules); // 設(shè)置參數(shù) $this->model->load($data, ''); // 進行驗證 return $this->model->validate(); } public function __call($name, $params) { if ($this->model->hasMethod($name)) { return call_user_func_array([$this->model, $name], $params); } else { return parent::__call($name, $params); } } }
總結(jié)
以上所述是小編給大家介紹的yii2 在控制器中驗證請求參數(shù)的使用方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- Yii2設(shè)置默認(rèn)控制器的兩種方法
- Yii2創(chuàng)建控制器(createController)方法詳解
- yii2控制器Controller Ajax操作示例
- Yii2使用$this->context獲取當(dāng)前的Module、Controller(控制器)、Action等
- Yii2框架控制器、路由、Url生成操作示例
- Yii控制器中filter過濾器用法分析
- Yii 框架控制器創(chuàng)建使用及控制器響應(yīng)操作示例
- PHP 基于Yii框架中使用smarty模板的方法詳解
- 在Yii框架中使用PHP模板引擎Twig的例子
- yii框架創(chuàng)建與設(shè)置默認(rèn)控制器并載入模板操作示例
相關(guān)文章
Yii實現(xiàn)Command任務(wù)處理的方法詳解
這篇文章主要介紹了Yii實現(xiàn)Command任務(wù)處理的方法,結(jié)合實例形式分析了Yii配置、加載及使用Command任務(wù)處理的步驟與相關(guān)技巧,需要的朋友可以參考下2016-07-07使用swoole 定時器變更超時未支付訂單狀態(tài)的解決方案
本文主要是借助 swoole 定時器和 redis 的 zset 來實現(xiàn)的定時檢查并過期未支付訂單,感興趣的朋友跟隨小編一起看看吧2019-07-07Windows7下PHP開發(fā)環(huán)境安裝配置圖文方法
備花點時間學(xué)習(xí)下PHP,于是在自己機器上配置了下PHP的開發(fā)和運行環(huán)境。之前在Windows Server 2003 OS中手工配置過,WEB服務(wù)器是IIS。這次是在自己機器上配置,找了個簡單方式。2010-05-05PHP SPL標(biāo)準(zhǔn)庫之SplFixedArray使用實例
這篇文章主要介紹了PHP SPL標(biāo)準(zhǔn)庫之SplFixedArray使用實例,SplFixedArray主要是處理數(shù)組相關(guān)的主要功能,它是固定長度的,比普通的數(shù)組處理更快,需要的朋友可以參考下2015-05-05