Yii2 Advanced – Preguntas y Respuestas

En esta entrada les dejo un grupo de preguntas con sus respuestas que son muy útiles cuando estamos desarrollando un proyecto con yii2 advanced (plantilla avanzada de yii2).

¿Dónde cambio la configuración de la base de datos en yii2 advanced?

En common\config\main-local.php está la configuración del acceso a la base de datos en yii2 advanced y el contenido del archivo debe verse parecido a esto:

<?php
return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=nombre_base_de_datos',
            'username' => 'root',
            'password' => 'tu_contrasena',
            'charset' => 'utf8',
            'enableSchemaCache' => true,
        ],
    ],
];
Configuración de la base de datos en yii2 advanced

¿Cómo normalizar las URLs en yii2 advanced?

Usando yii\web\UrlNormalizer. Por ejemplo, si quieres normalizar las URLs del frontend, agrega el código que está debajo en la sección components en frontend\config\main.php:

'urlManager' => [
	//…
        'normalizer' => [
                'class' => 'yii\web\UrlNormalizer',
                'action' => \yii\web\UrlNormalizer::ACTION_REDIRECT_PERMANENT
              ],
         //…
],
Normalizar URLs en yii2 advanced

¿Por qué UrlNormalizer no funciona en yii2 advanced?

Porque en frontend\config\main.php enableStrictParsing está en true. Quita esa línea o ponle comentarios y UrlNormalizer funcionará bien. Esto se debe a que en vendor\yiisoft\yii2\web\UrlManager.php, en la línea 323, si enableStrictParsing es true se termina la función sin antes haber normalizado la URL.

Bearer Authentication no funciona en mi API con yii2 advanced

La buena noticia es que el problema no es de yii2-advanced, es apache2 quien puede hacer esto por defecto. Al parecer Apache descarta la cabecera Authorization si no se corresponde con un par usuario-contraseña codificado con base64 (base64_encode(‘user:pass’)). Para solucionarlo, agrega lo siguiente al .htaccess que tienes en api/web o frontend/web o donde sea que esté el index.php de tu API o aplicación:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] 
Apache Bearer Authentication

Leave a Reply

Your email address will not be published. Required fields are marked *