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
,
настроенной вами в конфигурации приложения. Тем не менее, вы можете воспользоваться
внедрением зависимости, чтобы применить общую конфигурацию к вашим новым объектам ответа.