How to change access controller redirect/login url in yii2?
I have two login systems in my Yii2 application. First is default login system using User table, and second uses sms_account table. In custom controller I’ve created action for login, actionLogin(). I’ve added access control for my custom controller, but I’m having problem that when a person is not logged in, it redirects to site/login. I want to change redirect to custom-controller/login URL in Yii2 access control. My code is:
public function behaviors()
{ return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'actions' => ['login'], 'allow' => false, 'roles' => ['@'] ], [ 'actions' => ['home'], 'allow' => true, 'roles' => ['@'] ] ] ] ];
}Can anyone tell me how to change access control URL?
Отправка ответа ¶
Содержимое ответа не отправляется пользователю до вызова метода yiiwebResponse::send(). По умолчанию он вызывается
автоматически в конце метода yiibaseApplication::run(). Однако чтобы ответ был отправлен немедленно, вы можете
вызвать этот метод явно.
Для отправки ответа метод yiiwebResponse::send() выполняет следующие шаги:
Тело ответа ¶
Большинство ответов должны иметь тело, содержащее то, что вы хотите показать пользователям.
Если у вас уже имеется отформатированная строка для тела, вы можете присвоить её свойству yiiwebResponse::$content
объекта запроса:
Yii::$app->response->content = 'hello world!';Если ваши данные перед отправкой конечным пользователям нужно привести к определённому формату, вам следует установить значения
двух свойств: format и data. Свойство format
определяет, в каком формате следует возвращать данные из data. Например:
$response = Yii::$app->response;
$response->format = yiiwebResponse::FORMAT_JSON;
$response->data = ['message' => 'hello world'];Yii из коробки имеет поддержку следующих форматов, каждый из которых реализован классом форматтера.
Вы можете настроить эти форматтеры или добавить новые через свойство yiiwebResponse::$formatters.
Хотя тело запроса может быть явно установлено показанным выше способом, в большинстве случаев вы можете задавать его неявно
через возвращаемое значение методов действий. Типичный пример использования:
publicfunctionactionIndex(){ return$this->render('index');
}Действие index в коде выше возвращает результат рендеринга представления index. Возвращаемое значение будет взято
компонентом response, отформатировано и затем отправлено пользователям.
Так как по умолчанию форматом ответа является HTML, в методе действия следует
вернуть строку. Если вы хотите использовать другой формат ответа, необходимо настроить его перед отправкой данных:
publicfunctionactionInfo(){ Yii::$app->response->format = yiiwebResponse::FORMAT_JSON; return [ 'message' => 'hello world', 'code' => 100, ];
}Как уже было сказано, кроме использования стандартного компонента приложения response вы также можете создавать свои
объекты ответа и отправлять их конечным пользователям. Вы можете сделать это, возвращая такой объект в методе действия:
publicfunctionactionInfo(){ return Yii::createObject([ 'class' => 'yiiwebResponse', 'format' => yiiwebResponse::FORMAT_JSON, 'data' => [ 'message' => 'hello world', 'code' => 100, ], ]);
}Примечание: создавая собственные объекты ответов, вы не сможете воспользоваться конфигурацией компонента response,
настроенной вами в конфигурации приложения. Тем не менее, вы можете воспользоваться
внедрением зависимости, чтобы применить общую конфигурацию к вашим новым объектам ответа.
Вход в личный кабинет