您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關使用yii2 怎么在控制器中驗證請求參數,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
使用方法(實現效果)
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)); } //... } }
實現方法
定義參數驗證模型
定義參數驗證模型 ParamsValidateModel
,繼承 yii\db\ActiveRecord
,重寫 attributes()
方法,主要功能:
驗證規則可從對象外部進行設置。
從驗證規則中獲取可賦值的屬性。
<?php namespace common\models\app; use yii\db\ActiveRecord; class ParamsValidateModel extends ActiveRecord { /** * @var array 驗證規則 */ private $_rules = []; private $_attributes = []; // 設置驗證規則 public function setRules($rules) { $this->_rules = $rules; foreach ($rules as $item) { $this->_attributes = array_unique(array_merge($this->_attributes, (array)$item[0])); } } // 重寫獲取驗證規則 public function rules() { return $this->_rules; } // 設置可用屬性列表 public function attributes() { return $this->_attributes; } }
定義參數驗證服務類
定義參數驗證服務類,主要功能有:
設置參數列表和參數規則列表。
使用 參數驗證模型 進行驗證和存儲驗證錯誤消息。
使用魔術方法獲取 參數驗證模型 中的驗證錯誤消息。
<?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 數據項 * @param array $rules 驗證規則 * @return bool */ public function validate($data, $rules) { // 添加驗證規則 $this->model->setRules($rules); // 設置參數 $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); } } }
上述就是小編為大家分享的使用yii2 怎么在控制器中驗證請求參數了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。