Je souhaite obliger tous les utilisateurs à se connecter avant d'accéder aux pages de mon site. J'ai suivi le tutoriel de Larry Ullman Forçage de la connexion pour toutes les pages dans Yii .
Selon le didacticiel, vous pouvez créer une exception pour certaines pages afin d'éviter de rediriger vers la page de connexion. Afin de vérifier le contrôleur actuel, il a vérifié la valeur $_GET
. Mon problème est que j'ai utilisé urlManager
pour réécrire l'URL et que $_GET
me donne une valeur nulle. Existe-t-il une méthode que je peux utiliser pour obtenir le contrôleur et l'action actuels dans la partition de ma classe?
J'ai essayé ce qui suit mais il n'est pas accessible dans le cadre de ma classe de composants:
Yii::app()->controller->getId
Oui, vous pouvez obtenir la route actuelle controller/action
en inversant la règle urlManager
:
Yii::app()->urlManager->parseUrl(Yii::app()->request)
As-tu essayé:
Yii::app()->controller->id
et:
Yii::app()->controller->action->id
?
Comme maintenant dans Yii2
obtenir le controller name
actuel
Yii::$app->controller->id
controller object
actuel
Yii::$app->controller
action name
actuel:
Yii::$app->controller->action->id
route
actuel:
Yii::$app->requestedRoute
Avec Yii2, obtenez l’objet contrôleur actuel avec:
Yii::$app->controller
A partir du contrôleur, obtenez l'action en cours sous forme de chaîne en utilisant:
Yii::$app->controller->action->id
En Yii2:
Le problème lié à l'appel de Yii::$app->controller->id
est que, lorsque vous l'appelez quelque part (exemple: dans l'un de vos contrôleurs abstraits de niveau supérieur), Yii::$app->controller
peut ne pas être instancié pour le moment.
Appelez simplement urlManager
pour mapper la demande afin d’acheminer:
var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
Si je pose correctement votre question, vous essayez en principe d’arrêter l’accès à certaines actions du contrôleur sans y être connecté, non?
Si c'est ce que vous recherchez, la méthode correcte pour le faire est la suivante:
Créez une actionMethod()
dans le contrôleur comme suit:
class SomeController extends CController{
public function actionSomeAction(){
... More code...
}
Après cela, vous pouvez accéder au site en utilisant: chemin/vers/application/controllerName/actionName
Faites un contrôle d'accès comme suit:
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions' => array('**yourActionMethodName**'),
'users' => array('@'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}
Désormais, seuls les utilisateurs authentifiés pourraient accéder à l'URL.
J'espère que cela a résolu votre problème.
If you simply want to check if the user is a guest and if he is, send him to the login page everytime:
Dans config/main.php, ajoutez ce qui suit:
'defaultController' => 'controllerName/actionMethod',
Et dans ce contrôleur, ajoutez simplement la règle d'accès ci-dessus. Maintenant, par défaut, vous ouvrez le site avec une méthode de contrôle d’accès. Donc, cela vous redirigerait automatiquement vers la page de connexion.
Even another method
:
Il suffit d’ajouter ceci dans views/layouts/main.php
<?php
if(Yii::app()->user->isGuest)
{
$this->redirect('/site/login');
}
?>
Essayez Yii::app()->controller->getRoute()
if (Yii::$app->requestedAction->id == "index") {
//do something
}