maleks писал(а):
По теме, думаю можно поведение контроллера какое то сообразить, по типу access control в которое передавать экшены и соответствующие им невалидные комбинации значений гет параметров
Сделал фильтр:
Код: Выделить всё
class IdFilter extends ActionFilter
{
public $ids = [];
public $getId;
public function beforeAction($action)
{
$this->getId = Yii::$app->request->get('id');
foreach ($this->ids as $id) {
if ($id == $this->getId) {
Yii::$app->session->setFlash('error', 'Запрещены манипуляции с системными строками');
return Yii::$app->getResponse()->redirect(
'/' . $action->controller->id
);
}
}
return true;
}
}
Работает почти как надо
Есть два нюанса, не могу понять почему они не работают.
1. Не выводится flash сообщение на update action, редиректит на родительскую страницу нормально.
2. Action delete все-же происходит и успешного удаления появляется сообщение. Хотя в контроллере указал only:
Код: Выделить всё
public function behaviors()
{
return [
'id' =>[
'class' => IdFilter::class,
'ids' => [
'6'
],
'only' => [
'update', 'delete'
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}