YII2: Bad Request (#400) Unable to verify your data submissionYII2:
Такая ошибка:
Bad Request (#400) Unable to verify your data submissionYII2
может возникнуть при принудительном вызове формы с POST или GET параметрами со страницы сайта. Например:
1 2 3 4 5 6 7 8 9 |
<form id="TheFormRoute" method="post" action="?r=site%2Fls_route_report" target="Маршруты доставки"> <input type="hidden" id="f_count_ls" name="f_count_ls" value="" /> <input type="hidden" id="f_route_id" name="f_route_id" value="" /> <input type="hidden" id="f_route_name" name="f_route_name" value="" /> <input type="hidden" id="f_period" name="f_period" value="" /> <input type="hidden" id="f_area" name="f_area" value="" /> <input type="hidden" id="f_area_name" name="f_area_name" value="" /> <input type="hidden" id="f_ls_list" name="f_ls_list" value="" /> </form> |
В контроллере сайта код вида :
1 2 3 4 |
public function actionLs_route_report() { Yii::$app->controller->enableCsrfValidation = false; return $this->render('route_report'); } |
Как раз и приведет к подобной ошибке:
Это своеобразная защита фреймворка от потенциального флуда. Вариантов решения несколько:
Отключить проверку CSRF глобально:
1 2 3 4 5 |
'components' => [ 'request' => [ 'enableCsrfValidation' => false, ], |
Отключить проверку для конкретного контроллера:
1 2 3 4 5 6 7 8 9 10 11 |
class SiteController extends Controller { public function beforeAction($action){ $this->enableCsrfValidation = false; return parent::beforeAction($action); } public function actionLs_route_report() { return $this->render('route_report'); } |
Или воспользоваться ПРАВИЛЬНЫМ по мнению фреймворка методом:
1 2 3 4 5 6 7 8 9 10 |
<form id="TheFormRoute" method="post" action="?r=site%2Fls_route_report" target="Маршруты доставки"> <input id="form-token" type="hidden" name="<?=Yii::$app->request->csrfParam?>" value="<?=Yii::$app->request->csrfToken?>"/> <input type="hidden" id="f_count_ls" name="f_count_ls" value="" /> <input type="hidden" id="f_route_id" name="f_route_id" value="" /> <input type="hidden" id="f_route_name" name="f_route_name" value="" /> <input type="hidden" id="f_period" name="f_period" value="" /> <input type="hidden" id="f_area" name="f_area" value="" /> <input type="hidden" id="f_area_name" name="f_area_name" value="" /> <input type="hidden" id="f_ls_list" name="f_ls_list" value="" /> </form> |