Yii2 The «extra.asset-installer-paths» option is deprecated, use the «config.fxp-asset.installer-paths» option

Composer es un manejador de dependencias/librerías para proyectos en PHP,  mientras que Yii2 es un Framework de desarrollo MVC para proyectos en PHP.

Hace un tiempo que vengo recibiendo este warning cuando actualizo las librerías de composer con mi proyecto en Yii2, si bien es un warning y el sistema seguía funcionando sin problemas no lo quería ver más. A continuación como solucionarlo.

 

Razón

La razón del por qué comenzó a suceder este warning es sencilla. Desde la versión 1.3 de la librería de assets de Composer, todas estas opciones fueron cambiadas a la sección de configuración, es muy posible que debido a la redundancia. ( Puedes ver el changelog en el siguiente link https://github.com/fxpio/composer-asset-plugin/releases/tag/v1.3.0  ).

 

Solución

Cómo lo dicen las instrucciones de la versión, la configuración «extra» fue movida a la sección de configuración, por lo que simplemente deberemos de hacer eso en nuestro config.json, resultando en una sección de configuración como la siguiente :

 "config": {
 "fxp-asset": { 
 "installer-paths": { 
 "npm-asset-library": "vendor/npm", 
 "bower-asset-library": "vendor/bower" 
 }
 },
 "process-timeout": 1800
 },

 

Espero que te haya servido!. Si lo hizo no olvides compartir :D.

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

Yii2 Implementando Access Token para Autenticación REST

Los métodos de autenticación son los que nos permiten saber si un usuario pertenece a un sistema o no, generalmente cuando accedemos a algunas de nuestras cuentas de correo, facebook, etc lo que nosotros hacemos es autenticarnos con el servicio con nuestro usuario y clave. En este caso usaremos un Access Token para poder acceder a la aplicación.

Cuando usamos APIs en general, podemos acceder a la información de un servicio de una manera bastante sencilla. Nos gustaría que esto fuera por personas que tienen al menos una cuenta en el sistema o servicio.

En este caso veremos como implementar un access token para poder autentificarnos con la aplicación sin usar usuario o clave, lo que nos hará más sencillas las consultas.

Si estás leyendo esto lo más probable es que hayas o quieras desarrollar en Yii2 o al menos sepas que es un framework de desarrollo en php que usa MVC.

Yii2 viene por defecto, al menos en la versión avanzada, con un sistema de manejo de usuarios bastante potente. Lo que haremos ahora es simplemente modificar e implementar unos métodos para poder usar además los métodos de autentifícación disponibles en el framework. Ojo, no implementaremos esos métodos con este post.

Asumiendo que vamos a realizar una aplicación en donde un usuario solo tendrá un access token, modificaremos nuestra tabla de usuarios para que contenga además una columna tipo string única que almacenará nuestro token. La llamaremos access_token.

Teniendo la nueva columna nos vamos al modelo de usuario que estamos usando en nuestra aplicación y modificamos la función findIdentityByAccessToken   que se encarga en encontrar el usuario al cual corresponde el Access Token para que se vea como la que tenemos a continuación.

    public static function findIdentityByAccessToken($token, $type = null) {
        return static::findOne(['access_token' => $token]);
    }

Lo que hace es simplemente obtener la identidad del usuario al que corresponda ese Access Token.

Hasta ahora solo tenemos la función que corrobora el token y el usuario, pero no hemos creado el contenido del token. La idea en primera instancia para este caso es que el usuario ya tenga su Access Token al momento de ser creado. Así que agregaremos un método que se ejecutará antes de que el usuario sea creado.

   public function beforeSave($insert) {
        if ($this->isNewRecord) {
            $this->access_token = $this->getUniqueAccessToken();
        }
        return parent::beforeSave($insert);
    }

Con lo anterior designamos al nuevo usuario un Access Token único. Si lo notaron ese método no existe, por lo que debemos crearlo. Si bien la probabilidad de generar un string de largo X aleatorio que sea igual a otro es baja, debemos corroborar que no se repitan.

    private function getUniqueAccessToken() {
        $resultado = md5(Yii::$app->security->generateRandomString() . '_' . time());
        $identity = $this->findIdentityByAccessToken($resultado);
        if ($identity) {
            $resultado = $this->getUniqueAccessToken();
        }
        return $resultado;
    }

En este caso la función anterior se ejecutará hasta que encuentre un valor único con las características dadas. Si bien en este aso estoy usando el md5 de un string aleatorio, ustedes pueden usar otro hash o el string tal cual está.

Con esto ya puedes implementar los distintos métodos de autenticación para métodos REST proporcionados por YII2.

Cómo ejemplo, podríamos obtener la información de un API usando la autenticación por parámetros de la siguiente manera :

http://MIWEB.dev/v1/api/create?access-token=2b166b3d2b822d163244f63db6813792&idFuente=1

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

¿ Es necesario un framework ? Simplificando el desarrollo de software

Esta es una discusión que he tenido en bastantes ocasiones con pares y alumnos. La idea de este post es explicar un poco lo que se ha logrado con todas estas discusiones.

En muchos de los casos durante la universidad no hemos tenido la necesidad de desarrollar un software complejo, un software el cual deba de adaptarse a las necesidades del entorno, las modificaciones de ciertas librerías o simplemente al tiempo. La semana pasada le di el ejemplo a un alumno sobre codeignigter, en mi caso fue el primer framework que utilicé para desarrollo web utilizando php y actualmente ( no se si vaya a cambiar pronto) ya no es compatible con las nuevas versiones de php. Esto le puede pasar a cualquier desarrolo, la cantidad de actualizaciones, parches y modificaciones que salen anualmente son muchas más de las que podemos contar. Si esto le pasa a una aplicación que es mantenida por cientos de personas en la comunidad .. ¿Que nos espera a una aplicación desarrollada por nosotros ?

Leer más

Subiendo archivos CSV con Yii 2.0

Hace un par de días que me estoy haciendo un modulo que actualice la información que tengo en un sistema desarrollado en Yii2, por lo que decidí importar la información con un CSV que rescato de otra base de datos. Este post es sobre como arreglar un problema que existe al subir los archivos CSV al momento de ser validados.

A grandes rasgos subir archivos con Yii2 es bastante sencillo, se crea un modelo que se encarga de realizar las validaciones, se crea el controlador que pasa la información y la vista que en este caso mostrará el formulario para subir el archivo.

Al realizarlo con un archivo CSV esto no me funcionó, mientras que con todo el resto si, por lo que decidí publicar el proceso completo de como subir un archivo CSV a mi servidor usando Yii2.

 

Leer más