urlmanager una poner imagen example create como php yii

php - una - yii create url



Obtenga el controlador actual y la identificación de acción en Yii (8)

Sí, puede obtener la ruta actual de controller/action invirtiendo la regla de urlManager :

Yii::app()->urlManager->parseUrl(Yii::app()->request)

Quiero forzar a todos los usuarios a iniciar sesión antes de acceder a las páginas de mi sitio. He seguido el tutorial de Larry Ullman Forcing Login for All Pages en Yii .

De acuerdo con el tutorial, puede hacer una excepción para algunas páginas para evitar redirigirlas a la página de inicio de sesión. Para verificar el controlador actual, ha comprobado el valor $_GET . Mi problema es que he usado urlManager para reescribir la URL y $_GET me da un valor nulo. ¿Hay algún método que pueda usar para obtener el controlador actual y la acción en el puntaje de mi clase?

Intenté lo siguiente, pero no está accesible en el alcance de mi clase de componente:

Yii::app()->controller->getId


Has probado:

Yii::app()->controller->id

y:

Yii::app()->controller->action->id

?


Pruebe Yii::app()->controller->getRoute()


Usando Yii2, obtenga el objeto del controlador actual con:

Yii::$app->controller

Desde el controlador, obtenga la acción actual como una cadena usando:

Yii::$app->controller->action->id


Como ahora en Yii2

obtener el controller name actual

Yii::$app->controller->id

controller object actual

Yii::$app->controller

action name actual:

Yii::$app->controller->action->id


En Yii2:

El problema de llamar a Yii::$app->controller->id es que cuando lo llamas a alguna parte (ejemplo: en uno de tus controladores abstractos de nivel superior), Yii::$app->controller aún no se ha instanciado, por lo que devolverá el error.

Simplemente llame directamente a urlManager para mapear la solicitud a la ruta:

var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))


if (Yii::$app->requestedAction->id == "index") { //do something }


Si recibo su pregunta correctamente, básicamente está tratando de impedir que se acceda al acceso a ciertas acciones en el controlador sin haber iniciado sesión ¿correcto?

Si esto es lo que buscas, el método correcto para hacerlo es este:

  1. Haga un actionMethod() en el controlador de esta manera:

    class SomeController extends CController{ public function actionSomeAction(){ ... More code... }

  2. Después de eso, puede acceder al sitio usando: ruta / a / aplicación / nombre-controlador / nombre-acción

  3. Ahora, si desea obligar al usuario a iniciar sesión antes de acceder a la acción, haga esto:

Haga un control de acceso como ese:

/** * @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(''*''), ), ); }

Ahora solo los usuarios autenticados podrían acceder a la URL.

Espero que haya resuelto tu problema

If you simply want to check if the user is a guest and if he is, send him to the login page everytime:

En config / main.php, agregue lo siguiente:

''defaultController'' => ''controllerName/actionMethod'',

Y en ese controlador simplemente agregue la regla de acceso anterior. Ahora, de forma predeterminada, está abriendo el sitio a un método de acceso controlado. Entonces lo redirigiría automáticamente a la página de inicio de sesión.

Even another method :

Solo agregue esto en las vistas / layouts / main.php

<?php if(Yii::app()->user->isGuest) { $this->redirect(''/site/login''); } ?>