自己写的一个表单传给控制器,点了提交之后发现如下问题
后面查阅资料是因为表单被yii2的csrf验证拦截了,毕竟是我自己写的表单,所以只需要屏蔽csrf验证这个问题就解决了。
这里提供两个方法来屏蔽csrf验证。
1.在直接在当前的的控制器里声明 $enableCsrfValidation=false;
但该方法将屏蔽该控制器下的所有Csrf验证。
2.单独写一个行为(NoCsrf.php),之后在当前控制器下加载该行为,就可以实现在某个action下屏蔽csrf验证了。
NoCsrf.php
use yii; use yii\base\ActionEvent; use yii\base\Behavior; use yii\web\Controller; class NoCsrf extends Behavior{ public $actions = []; public $controller; public function events(){ return [Controller::EVENT_BEFORE_ACTION => 'beforeAction']; } public function beforeAction($event){ $action = $event->action->id; if(in_array($action, $this->actions)){ $this->controller->enableCsrfValidation = false; } } }
在当前控制器里加载该行为:
public function behaviors() { return [ 'csrf' => [ 'class' => NoCsrf::className(), 'controller' => $this, 'actions' => [ 'actionName' ] ] ]; }
这样就可以实现某个action下屏蔽csrf验证。