Existe-t-il un moyen de rediriger vers une page autre que la connexion à la méthode de comportement dans Yii 2?
Le contenu de ma méthode de comportement:
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
],
],
'access' => [
'class' => AccessControl::className(),
'only' => [ 'create','update' ],
'rules' => [
[
'allow' => true,
'actions' => [ 'create'],
'roles' => ['@'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['?'],
],
],
],
];
}
Mais cela redirige pour vous connecter. Je dois spécifier une autre page de redirection ou un appel:
throw new \yii\web\HttpException(403, 'The requested Item could not be found.');
Vous devez modifier la propriété loginUrl
de la classe yii\web\User
.
Si vous voulez le changer globalement, éditez votre config:
'components' => [
'user' => [
'loginUrl' => ['site/sign-in'],
],
],
Si vous devez le modifier dans le contrôleur ou l'action spécifique, vous pouvez également le définir comme suit:
Yii::$app->user->loginUrl = ['site/sign-in'];
Vous devez redéfinir la méthode beforeAction()
dans le contrôleur là où vous devez le faire. Tous les accès sont effectués dans cet événement.
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if (parent::beforeAction($action)) {
// If you want to change it only in one or few actions, add additional check
Yii::$app->user->loginUrl = ['site/sign-in'];
return true;
} else {
return false;
}
}
Pour plus de détails, consultez la documentation officielle sur property et event .
Vous pouvez bénéficier de denyCallback (), comme le document officiel de Yii2
le définit:
Un rappel qui sera appelé si l'accès doit être refusé à l'utilisateur actuel. Si non défini, denyAccess () sera appelé.
La signature du rappel doit être la suivante:
function ($rule, $action)
où $rule
est la règle qui refuse l'utilisateur, et $action
est l'objet d'action actuel. $rule
peut être null si l'accès est refusé car aucune des règles ne correspond.
Par exemple:
'denyCallback' => function($rule, $action) {
if ($something) {
//set flash for example
Yii::$app->session->setFlash('key', 'Value');
//Redirect
return $action->controller->redirect('action');
}
//as a default behavior, it throws an exception
throw new ForbiddenHttpException("Forbidden access");
},
J'utilise yii2-user pour la gestion des utilisateurs, et la redirection vers la connexion allait vers/user/login au lieu de la/utilisateur/security/security/login/défini par l'utilisateur. ma solution consistait donc à mettre à jour les règles urlManager avec: '' => 'utilisateur/sécurité /'
Je suppose que cela pourrait également être utilisé pour rediriger vers un autre contrôleur/action autre que la connexion.
Voir ici .