Herramientas de usuario

Herramientas del sitio


cursos:yii2:controllers

Controladores

Definir el layout

Por defecto, el layout es 'main', que está en views/layouts. Podemos cambiarlo para todo el controlador, asignándolo en la clase:

class UsuariosController extends Controller {
  public $layout='//layouts/milayout';
 

Si se desea cambiar para una acción en particular y no para el resto, antes de hacer el render dentro de ésta, asignaremos el valor $this→layout:

  public function actionPDF($id){
    ...
    $this->layout='//layouts/pdf';
    return $this->render(.....)

Acción por defecto

La acción por defecto es 'index'. Para cambiarla, añadimos al principio la variable defaultAction:

  public $defaultAction='create';

Autorización: Cambiar los permisos de ejecución de una acción

Yii2 tiene implementado un mecanismo basado en Roles. Se puede consultar aquí: Authorization Para limitar los permisos de acceso según la acción, incluiremos el elemento 'access' en el método behaviors() del controlador.

Para cada bloque, definimos la lista de acciones y los roles permitidos para esas acciones:

  • Público:
     'roles'=>['?']
  • Cualquier usuario registrado:
     'roles'=>['@']

Si no necesitamos implementar el control mediante roles, pero estos dos roles predefinidos se quedan cortos, porque , por ejemplo, queremos que determinadas acciones solamente las pueda ejecutar el usuario 'admin', o aquellos usuarios que tengan un atributo “permisos”=“AD”, podemos utilizar la propiedad matchCallBack:

    public function behaviors() {
        return [
 
	 'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['index', 'view'],
                        'roles' => ['@'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['create'],
                        'matchCallback' => function ($rule, $action) {
                            return Yii::$app->user->identity->usuario=="admin";
                            //return Yii::$app->user->identity->permisos=="AD";
                            //return Yii::$app->user->identity->checkpermiso("AD"); //Este método lo creamos en el modelo Usuarios (o User, si no lo hemos cambiado el predeterminado)
 
                        }
                    ],
                ],
            ],
        ];
    }

Crear una acción

  1. Creamos un método llamado actionACCION, que tendrá como parámetros aquellos datos que sea obligatorio recibir por $_GET. Por ejemplo:
      function actionImprimir($id){
      ...
      }
     

En este caso, la acción imprimir tendrá que ejecutarse de la forma index.php?r=entradas/imprimir&id=33

  1. Añadimos la acción a behaviors() para asociarle los permisos
  2. Si es necesario, creamos la vista correspondiente en views/controlador. (Por ejemplo: views/entradas/imprimir.php)