Yii2 – Como desarrollar una aplicación multilenguaje

Hace ya tiempo hablamos de cómo desarrollar una aplicación multilenguaje para yii versión 1, y hoy os traemos los pasos para realizarlo con la versión yii2:

Básicamente hay que seguir los siguientes pasos:

1 – Abrir una línea de comandos (cmd) y acceder a la raíz de nuestro proyecto. Y una vez ahí incluir la siguiente orden. Esto generará un archivo dentro de la ruta config/ llamado i18n.php, que será el que contenga los valores globales de la internacionalización.

yii message/config @app/config/i18n.php

2 – Tendremos que modificar la línea languages indicando los idiomas que queramos:

'languages' => ['es_ES','en_US'],

3 – También será necesario modificar el sourcePath y el messagePath con los siguiente valores:

'sourcePath' => __DIR__. DIRECTORY_SEPARATOR .'..',
'messagePath' => __DIR__ . DIRECTORY_SEPARATOR .'..'. DIRECTORY_SEPARATOR . 'messages',

4 – Será necesario crear la carpeta messages en el directorio raíz de la aplicación.
5 – Incluir dentro del congif/web.php la siguientes líneas dentro de components (en caso de que no se haga sólo se podrán introducir traducciones en el fichero app)

'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@app/messages',
                'sourceLanguage' => 'en',
                'fileMap' => [
                    //'main' => 'main.php',
                ],
            ],
        ],
    ],

6 – Una vez tengamos eso, tendremos que generar los ficheros de dichos idiomas (o cuando queramos actualizarlos). Para ello es necesario ejecutar:

yii message/extract @app/config/i18n.php

Recomendación:
En config/i18n.php si queréis que el extract de todos los mensajes vaya más rápido podéis introducir un except de los vender.

Yii2 – Redirecciones y Htaccess

Hoy toca incluir cómo hacer las redirecciones y htaccess en yii2 para que fácilmente se puedan hacer urls amigables. Lo saqué de está página (aunque hay unas modificaciones mías en el archivo web.php).

Básicamente es necesario hacer 3 pasos (recordar que {root} es el lugar donde hemos creado la plantilla básica:

Paso 1: Crear fichero {root}/.htaccess (para redireccionarlo todo a la carpeta web menos aquellos ficheros o directorios que existan)

<IfModule mod_rewrite.c>
 Options +FollowSymlinks
 RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_URI} ^/.*
 RewriteRule ^(.*)$ web/$1 [L]
 RewriteCond %{REQUEST_URI} !^/web/
 RewriteCond %{REQUEST_FILENAME} !-f [OR]
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^.*$ web/index.php
</IfModule>

Paso 2: Crear fichero {root}/web/.htaccess (para que pase todo por el index.php, menos como en el caso anterior aquellos ficheros o directorios que existan)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Paso 3: Actualizar fichero {root}/config/web.php (indicar a yii2 que se van a mostrar urls amigables y definir las primeras reglas). Estas reglas te permitirán también pasar un parámetro por get.

'request' => [
    'baseUrl' => '',
],
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '' => 'site/index',
        //'<action>'=>'site/<action>',
        '<controller:\w+>/<id:\d+>'=>'<controller>/view',
        '<controller:\w+><action:\w+>/<id:\d+>'=>'<controller>/<action>',
        '<controller:\w+><action:\w+>'=>'<controller>/<action>',
    ],
],

Como habilitar peticiones ajax en el yii2

Este es el estado: desde un js estoy realizando una petición post a un servidor yii2 (del modelo avanzado, el que tiene backend y frontend). Y el problema que me encontraba era que siempre me daba un CSRF (). En la versión 1 de yii no había ese problema puesto que por defecto no estaba habilitado, pero ahora así.

¿Cómo se deshabilita entonces el CSRF en el yii2?
Es algo muy simple, y se puede hacer de dos formas diferentes:

Forma 1: Sólo un controlador.
Es necesario entrar en el controlador en cuestión, y en la función beforeAction simplemente pegaremos este trozo de código:

public function beforeAction($event){
    $this->enableCsrfValidation = false;
    return true;
}

 

Forma 2: Toda la aplicación
Accediendo al main.php de la aplicación añadiremos dentro de components las líneas:

'request' => [
    'enableCsrfValidation' => false,
],

Una vez realizado ya funcionará todo correctamente y el javascript en cuestión recibirá los datos que le enviemos

Yii2 vs Yii

Como sabéis hace menos de un mes ha aparecido el nuevo framework yii2 en versión beta (hasta ahora estaba en versión alfa), y me han pedido que investigue más acerca de él. Hasta ahora había trabajado muy bien con yii, y la verdad, es que temblaba al pensar en los cambios que podían haberse sucedido. Como no he encontrado ningún post referente a yii2 en español (tampoco he encontrado ninguno en inglés con las diferencias entre la anterior versión y la nueva) pues me he aventurado a crear el post.

¿Donde puedo descargarme el yii2?
Muy fácil, en la web http://www.yiiframework.com/download/, veréis primeramente la versión estable 1.1.XX y más abajo la versión 2. Se puede descargar vía Composer o bien descargarse un archivo y deszipearlo donde deseeis.

¿Qué diferencias hay entre el yii y el yii2?

  • PHP: Yii 2.0 requiere PHP 5.4.0 o superior, y es que hace uso de las últimas características de PHP como los namespaces (forma de encapsular objetos), traits (sirve para reutilizar series de métodos en diferentes clases sin necesidad de extender o implementar, ver este artículo)
  • Yii 2.0 ha sido reescrito totalmente por lo cual se necesitará un proceso de migrado de las aplicaciones que estén en Yii 1.
  • La carpeta protected….. ha desaparecido, pero se encuentran gran parte de las carpetas que utilizabamos hasta ahora.
  • Actualmente hay dos modelos de yii2 que pueden descargarse, el básico (imaginaos algo más o menos similar al yii1) y el avanzado (imaginaos que tenéis 3 tipos de MVC, los del frontend, los del backend y los que se utilizan tanto en el front como en el back).
  • La forma de instalación hasta ahora es vía Composer, con lo cual toca instalarlo… si puedes (digo si puedes porque es muy fácil en linux, pero en Windows podéis temblar bien). Otra opción vía rápida es coger la aplicación básica o la avanzada y utilizarla para vuestros propósitos.

Entrando más en detalle de diferencias entre yii y yii2.

  • CcComponent: Yii 2.0 divide el CComponent en dos clases yii\base\Object(Permite definir propiedades de clase por medio de getters y setters) y yii\base\Component (extiende de Object y contiene los eventos y behavior)
  • Eventos: Ya no es necesario definir para los eventos un método on. Puedes utilizar cualquier nombre de evento. Eso sí, para adjuntar un handler a ese evento, si debes usar ese on method.
  • Alias para paths: En yii2 se ha dado más uso de los alias path
  • Render: Antes para mostrar una vista teníamos que simplemente llamar a render() o a renderPartial() pero ahora tenemos que hacer un echo de esto.
  • Console Applications: Las aplicaciones de consola están compuestas por controladoras.
  • Las extensiones de yii 1.1 no son compatibles con la versión 2.0
  • Y muchas más que podréis ver en la página oficial.

Para cualquier dato este es el link para la “Guía Definitiva del Yii 2.0”.