===== 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í: [[http://www.yiiframework.com/doc-2.0/guide-security-authorization.html|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 ==== - 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 - Añadimos la acción a behaviors() para asociarle los permisos - Si es necesario, creamos la vista correspondiente en views/controlador. (Por ejemplo: views/entradas/imprimir.php)