yii2使用gii生成的搜索視圖里的表單使用的是get方式,我改為post就提示無法驗證,以為是控制器默認訪問是get,實際默認是get和post都可以
public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], ]; }
之所以提示無法驗證是因為對於post請求,是有一個CSRF驗證的
解決POST數據時因啟用Csrf出現的400錯誤
第一種解決辦法是關閉Csrf
public function init() { $this->enableCsrfValidation = false; } //或者 public function __construct($id, $module, $config = []) { $this->menuActive = 2; $this->enableCsrfValidation = false; parent::__construct($id, $module, $config); } //總之把enableCsrfValidation設為false就可以了
第二種解決辦法是在form表單中加入隱藏域
<input name="_csrf" type="hidden" id="_csrf" value="<?= Yii::$app->request->csrfToken ?>">
第三種解決辦法是在AJAX中加入_csrf字段
var csrfToken = $('meta[name="csrf-token"]').attr("content"); $.ajax({ type: 'POST', url: url, data: { _csrf:csrfToken}, success: success, dataType: dataType });