Laravel 5.4. API. Rutas de la aplicación

Continuemos.

Ahora es el momento de preparar las rutas de la aplicación que van a hacer que la magia funcione.

Para ello, en Laravel disponemos de los archivos situados en la carpeta “routes”, que de momento los que nos interesan son los archivos “api.php” y “web.php”. La diferencia entre cada uno de ellos es que la ruta de acceso será diferente, para la api todas las rutas incluirán al inicio la ruta “/api/” y los de web no la incluirán.

Dicho esto, y para separar mejor las rutas de la api y las diferentes modifcaciones, voy a tomar la costumbre de nombrar las llamadas con la versión de la API que utilice, “v1”, “v2”, etc… así será más sencillo luego a la hora de documentarlo.

Bien, para incluir todas las rutas del manejo de usuarios creadas en el anterior post, hemos de incluir en el archivo “web.php” lo siguiente:

Y modificando o añadiendo las rutas que queramos podremos ir montando nuestra api con los modulos necesarios.

Laravel 5.4: Comenzando API. CRUD Usuarios

Continuamos con este “cursillo – aprendizaje” sobre crear una aplicación con Laravel y Angular.

Lo primero con lo que vamos a comenzar es con las operaciones CRUD básicas para los usuarios de la aplicación.

Lo primero será crear el controlador que usaremos para estas funciones, para lo que será necesario ejecutar el siguiente comando:

Con el modificador  –resource conseguiremos que nos cree el controlador con un esqueleto basico de todas las funciones básicas para el manejo de los usuarios (aparte de las CRUD, las necesarias para manejar las vistas y formularios relacionados con la creación, update, etc).

Una vez conseguido esto, editaremos el archivo routes\web.php y añadiremos lo siguiente:

(si, de momento lo vamos a meter en la ruta web, para irlo probando, más adelante lo ingresaremos en una api con autenticación).

Con este código conseguimos que se reconozcan las rutas necesarias para las operaciones. Como en este caso estamos creando una api que no tendrá “vistas” (formularios o webs que ver) podemos obviar rutas y decirle que únicamente utilice las relativas al CRUD.

También hemos de crear el modelo. En este momento voy a ir creando modelos (aunque se pueden usar factorías y demás opciones, eso ya lo dejo de momento a la investigación de cada uno, o para más adelante). Para ello el comando es

Nota: un apunte, si ejecutamos directamente el comando de crear modelo con el modificador resource, como en el controlador, ya nos creara el modelo y el controlador enlazados (lo cual nos agilizará un poco estos pasos)

Y ahora hay que meterse en harina.

Con el siguiente comando podemos ver una lista de las rutas que están incluidas en este momento. Así veremos los métodos y opciones que se van a utilizar para las operaciones.

Y ahora se tratará de ir modificando las funciones en el controlador y o el modelo para ir adaptando el control de usuarios.

Dejo por ejemplo el código (sin finalizar) de la función de guardar un usuario

Tras modificar todas las funciones, estaremos listos para el siguiente paso Smile

Laravel 5.4 y Angular 4. Base de datos.

Continuamos con esta serie de entradas de un proyecto con Laravel.

Dado que voy a utilizar Laravel como backend y voy a generar una API REST con este framework, es hora de prepararlo.

Así que vamos con ello.

Preparando la base de datos.

Lo primero de todo proyecto es preparar la base de datos.

En estas lides nos va a resultar muy útil el sistema de «migraciones» (migrates) y «semillas» (seeds) de Laravel.
No me voy a detener mucho tiempo en definir que son, para eso recomiendo mirar la documentación.

User Migrate.

Para empezar, al menos en este proyecto, modificaremos el archivo «2014_10_12_000000_create_users_table.php», que es un archivo de migración que se copia al iniciar el proyecto con composer para generar la tabla de usuarios, y ya que está, para que complicarnos.
No pongo todos los campos que voy a utilizar en la vase de datos, únicamente alguno o los no relevantes.
Todas las migraciones tienen dos funciones, la función up() y la down(), que son las acciones al crear la base de datos o cuando se hace algún rollback, respectivamente. En la función up() incluiremos lo siguiente:

Levels Migrate

En mi caso, y para la aplicación, voy a incluir un sistema de niveles, por lo que es necesario una tabla que guarde los niveles a utilizar.
Para crear el migrate que se encargará de crear la base de datos.

Una vez creado, le generaremos los campos necesarios (idlevel y name) en el código de la misma manera que para el usuario.

En este caso, lo más recomendable es insertar algunas filas, para lo que será necesario que utilicemos los seeders de Laravel para rellenar esos huecos.

Para empezar, crearemos un Seeder, que se guardará en la carpeta Database/seeds

Una vez creado, al entrar a modificarlo observaremos que únicamente tiene la función run(), donde se ejecutarán los procesos que rellenaran las filas de la tabla.

Aquí en este caso, voy a incluir los registros necesarios (ya que mi plan para esta tabla es un numero finito y relativamente asequible de mantener), aunque se puede automatizar con Factorias. Así que, de momento, incluiré el siguiente código:

Nota: que no se os olvide incluir el uso de Carbon en esta clase, porque sino no funcionará. Añadid

al inicio del archivo, en la sección de uses.

Una vez generado el archivo del seed, es necesario indicar que se ejecutará. Para ello, lo primero es modificar el archivo «App\Database\seeds\DatabaseSeeder.php», en el cual hay que añadir la clase seed que acabamos de crear, así que dentro de la función run de este archivo incluiremos una línea por cada seeder que queramos ejecutar:

Una vez hecho todo esto, para ejecutar estos seeds hay tres formas principales:

O bien ejecutarlo cuando se hace un migrate:refresh (explicado debajo).

Utilizando migrates y seeds

Ahora es el momento de hacer que Laravel ejecute estas migraciones y rellenos de datos.

Para ello, el comando a ejecutar es :

Para que se ejecuten los seeds es necesario ejecutar el siguiente:

Pero si quereis regenerar la base de datos completa e incluir los cambios, lo mejor es ejecutar:

Esto hará que se reinicie todos los campos y migraciones de la base de datos.

Nota: es posible que os dé un error, en estos casos antes del migrate:refresh o de ejecutar los seeds, es recomendable ejecutar lo siguiente:

Para que se regenere el árbol de clases que utilizará luego artisan.

Conclusión

De esta forma, y tras generar todos los migrates y seeds necesarios para todos los campos y tablas de la base de datos que vaya a utilizar nuestra aplicación, estaremos preparados para poder empezar a meternos en harina para generar las rutas, controladores, modelos, etc, que va a necesitar nuestra aplicación.

Qué seguiremos con ello en el siguiente capítulo.

Gracias por seguir hasta aquí 😉

 

 

Virtualmin mod_fcgid error: No se ejecuta el código php.

Hoy volvemos con una nota rápida.

Para aquellos que uséis Virtualmin para configurar vuestros servidores, si os ocurre como a mi, que tras instalarlo en un servidor y recuperar una copia de seguridad anterior cuando intentáis acceder a los sitios que teníais configurados os da para descargar el archivo php en vez de ejecutarlo, os puede suceder por lo siguiente:

Comprobad que:
En la parte de “Opciones del website”, dentro de “Configuración del servidor” dentro del dominio…

image

Estan las opciones como os muestro:image

Después, y esto es lo que me dio guerra, y al final he encontrado la solución en https://www.virtualmin.com/node/25521, y aquí os muestro los pasos:

  1. imageDirigiros a “Configurar Website” dentro de “Servicios”, en el dominio.
  2. Entráis a “Editar Directivas”, que se muestra con este icono.image
  3. Comprobad si en el archivo del dominio se encuentran las siguientes líneas:
    RemoveHandler .php
    RemoveHandler .php5
    php_admin_value engine Off
    y si es así, eliminadlas.
  4. Recargad el servidor Apache y a correr.

Textos largos, ODBC y PHP. Accediendo a una base de datos Access.

Bueno, me imagino que a los que podáis leer esto alguna vez os haya ocurrido.

Por circunstancias de mantenimiento de sitios web que tienen la base de datos en Access, me encuentro con que al recuperar un campo MEMO de Access en una pagina php me cortaba el contenido.

El problema estaba en una directriz de la sección ODBC del php.ini, en concreto en la siguiente variable:

; Handling of LONG fields.  Returns number of bytes to variables.  0 means
; passthru.
; http://php.net/odbc.defaultlrl
ODBC.defaultlrl = 4096

Su valor por defecto es de 4096 bytes para cada variable, pero si vais a utilizar textos realmente largos, es mejor cambiar este valor a uno superior, o dejarlo en ON para no tener limite (aunque esto es bastante arriesgado, ya que probablemente el consumo de memoria se dispararía).

¿Pues no me he tirado un par de días comiéndome la cabeza por esto?…

En fin, por si a alguien más le pasa, aquí queda constancia del error y su solución.

Saludos!!

Instalando XAMPP en Windows 7

Bueno, Windows 7 64 Bits, e instalando XAMPP 1.7.4 descargado desde http://www.apachefriends.org/es/xampp.html.

Instalación correcta, pero con avisos de que el servicio de Apache no se ejecuta correctamente.

Primer paso: Desactivar IIS a través de las opciones de “Activar y Desactivar Caracteristicas de Windows”.

Segundo Paso: Desactivar en Skype la opción de “Usar puertos 80 y 443”.

Tercer paso: Idem para Teamviewer.

Y… ¡Seguimos con error! que nada, que no se activa.

Tras revisar la documentación en el foro de Apache Friends, me encontré con la siguiente entrada: http://www.apachefriends.org/f/viewtopic.php?f=16&t=47943 y ¡Premio!, desactivando una opcion del arranque de Apache relacionada con Perl, ha dejado de dar el error de inicio. En concreto desactivando en httpd.conf lo siguiente ‘Include "conf/extra/httpd-perl.conf"’

Debe de haber algun problema entre la DLL que debe de cargar para perl, que hace que en sistemas de 64 bits falle. A ver si se encuentra alguna solución…

Saludos!!!

Actualizando a WordPress 3.0

Bien, nueva versión de WordPress, actualizando el blog.

Pero en esta ocasión me he encontrado con un “problemilla”. Resulta que al intentar hacer la actualización automática me salía un bonito error.

El mensaje decía algo así como:

You are not allowed to call this page directly.

Busca, rebusca, prueba a intentar entrar en el servidor, utilizarlo como sitio desde donde se ve la web… y nada, no había manera.

Tras bucear un poco por ahí, encontré una solución en http://wordpress.org/support/topic/385355.

El causante de todo es un plugin, de tal manera que, si se tiene instalado el plugin “Nextgen Imageflow” empieza a aparecer ese error al tratar de actualizar el núcleo de WordPress, en concreto al llamar a la pagina update-core.php.

En este caso la solución consiste en desactivar temporalmente el plugin rebelde y volverlo a activar tras haber conseguido actualizar correctamente el núcleo.

Outlook, Funambol y Egroupware.

Este ya es un tema tratado, en Sincronización Egroupware y Outlook y en Sincronización Egroupware y Outlook (II).

Bueno, en esas entradas (que como veis tienen tiempo ya) describía como me había funcionado una instalación de Egroupware y la sincronización con Outlook.

Cual es mi sorpresa cuando al tratar de hacerlo de nuevo ayer… me encuentro con que al utilizar el programa Funambol Outlook Plugin me da un error tan bonito como “Client not Authenticated” (usuario no autorizado).

Dirección de servidor, usuario, todo correcto… Comedura de cabeza en marcha…

¿Solución? tan simple que duele… Activar SyncML para los usuarios/grupos que necesiten la sincronización, desde la administración de cuentas de Egroupware.

Solución encontrada tras ver esta entrada en Desarrollo Libre.

Manda narices… lo más sencillo lo que más quebraderos de cabeza da…

Instalando Ubuntu junto a Windows en Toshiba A500

Bueno, os pongo en antecedentes.

Portátil Toshiba con 4 particiones primarias asignadas para Windows.

No es posible eliminar una de las particiones para hacerla extendida (vamos, que no había ganas) y tirar millas.

Bueno, pues el proceso es el siguiente.

Supongamos que tenemos el disco de Ubuntu (en iso, grabado… el resultado es el mismo)… si no lo tienes, descárgalo de www.ubuntu.com y luego seguimos.

Instalación.

  • Con Windows iniciado, metemos el disco de Ubuntu (o lo cargamos en una unidad virtual) y nos saldrá el instalador de Ubuntu, o bien buscamos en el disco el ejecutable “Wubi.exe”
  • Nos aparecerá el siguiente cuadro de dialogo donde nos pregunta la unidad a instalar, el idioma, el tamaño de disco que reconocerá Ubuntu, el entorno de escritorio (normalmente sólo tendrá una opción), el usuario y la contraseña.

Wubi

  • Después de insertar estos datos solo hay que esperar hasta que termine el proceso de instalación y nos aparezca la pantalla para reiniciar.

wubi-reboot

  • Cuando reiniciemos veremos que nos aparece una pantalla para elegir entre nuestra versión de Windows y Ubuntu. Si seleccionamos esta última el proceso de instalación seguirá hasta que se vuelva a reiniciar la maquina para empezar a usarlo (volverá a salir el menú de Windows o Ubuntu, y el menú de Grub (el gestor de arranque) cada vez.
  • Una vez completa la instalación, tenía un Ubuntu configurado y listo para empezar a trastear con el.
  • La instalación completa de Ubuntu estará situada en la unidad especificada en la instalación en una carpeta “Ubuntu”. Dentro del mismo Ubuntu los archivos de la unidad dónde se instaló estarán en una carpeta “/host”.

Instalar Kubuntu junto con Ubuntu.

Lo primero tras instalar Ubuntu fue directamente instalar los componentes que permiten elegir entre Ubuntu y Kubuntu (escritorio GNOME o KDE).

Para conseguirlo es tan fácil como entrar en una consola (o terminal) y escribir:

$:sudo apt-get install kubuntu-desktop

Tras descargar esto, es recomendable reiniciar la máquina y probar.

Actualizando la distribución.

Bueno, tras los pasos anteriores es el momento de poner todos los paquetes a sus ultimas versiones. Se puede realizar en modo gráfico usando el “Gestor de actualizaciones” o bien en modo consola usando los comandos:

$: sudo apt-get update
$: sudo apt-get upgrade

En este caso la actualización se realizará perfectamente, pero si hay una actualización del Kernel de Linux os puede suceder como me pasó a mi. Tras la actualización, al reiniciar me salía un bonito error al tratar de arrancar Ubuntu. el mensaje decía algo como “kernel panic – not syncing : VFS: unable to mount root”.

Qué no cunda el pánico, es un error debido a la versión del cargador de Wubi (un archivo llamado wubildr). La versión que instala por defecto Ubuntu no es compatible con el nuevo kernel.

La solución es sencilla, aunque farragosa. Reiniciar a Windows, descargarse la nueva versión de “wubildr” y sustituir el archivo que se encuentra en “C:\”. Yo por si acaso también sustituí el que se encuentra dentro de la carpeta de Ubuntu (por ejemplo C:\Ubuntu\winboot)

La solución de este problema la encontré en http://ubuntuforums.org/showthread.php?t=1396327.

Y también os dejo el archivo que me descargue, por si no queréis buscarlo

Haciendo funcionar Bluetooth.

Esta fue también una parte un poco farragosa, aunque no demasiado.

Solo es seguir las instrucciones de http://lamaquinadiferencial.wordpress.com/2009/06/10/no-funciona-el-bluetooth-en-toshiba-satellite-en-debianubuntu/.

Según esto, lo que hay que hacer es instalar el paquete “omnibook-source”, pero para ello hay que añadir el repositorio donde se encuentra…

Se puede usar el método que prefiráis, mediante “Orígenes de Software” o mediante editar directamente el archivo /etc/apt/sources.list.

el caso es acabar añadiendo:

Paso siguiente. Añadir las claves de los repositorios:

El paso de añadir la clave os puede dar algún problema. Pero el copiar y pegar salva la vida.

Paso siguiente. Instalar omnibook-source

Paso siguiente. Hay que generar el modulo para el kernel.

Creamos un archivo de opciones del modulo:

Y podemos añadir la carga del módulo en el arranque de Ubuntu, agregando una línea con el nombre del modulo (omnibook) al final del fichero /etc/modules.

Ultimo paso. Reiniciar la maquina o probar a arrancar el modulo sin reiniciar.

Fin.

¡Conseguido!. Tras todo esto tenemos Ubuntu instalada “con / dentro de” Windows, funcional, y con todos los aparatitos del portátil funcionando.

Lo único que puede quedar es activar los controladores restringidos. Los que te encuentra Ubuntu son para la tarjeta de TV que lleva integrada el portátil, y para la grafica ATI. Cada uno elige si instalarlos o no.

Un saludo y buena caza.

Escuchando: Millow – Europa FM 2010 – Ayo Technology

WordPress no muestra los comentarios en las páginas…

Bueno, no podía ser de otra forma, me he encontrado con un fallo en el generador de plantillas de wordpress…

Tiene la malsana costumbre de que en el archivo “page.php” se le “olvida” meter una sección para que los comentarios se muestren si la página los tiene habilitados.

Menos mal que la solución es bastante simple:

  1. Antes de subir el tema al blog, editar el archivo “page.php” (con el bloc de notas mismo, o vuestro editor HTML favorito.
  2. localizar el fin del bucle de wordpress. En concreto una línea como esta: “php endwhile;”
  3. justo antes de esa linea insertar esta otra: “< ?php comments_template(); ?>”.
  4. Subir el tema.

Listo!. ya solo queda disfrutarlo.

Sincronización Outlook – Egroupware

Bueno, pues aquí dejo lo que me ha pasado, por si a alguien más le hace falta.

Tengo como gestor web de trabajo en grupo Egroupware. Funciona genial en web, y admite sincronización con clientes SyncML.

Para conectarlo con Outlook he utilizado el programa Funambol, y su cliente para Outlook.

Este cliente admite conexiones a su sistema de sincronización, o a otros (como el de E-groupware).

Bien, pues para tenerlo configurado correctamente son necesarias un par de cosas.

Punto 1:

En el servidor Apache (o el servidor web donde este E-groupware), es necesario que se coloquen las siguientes líneas en el archivo de configuración:

<Location /egroupware/rpc.php>
php_value mbstring.func_overload 0
Order allow,deny
Allow from all
</Location>

Sin esto no funcionará correctamente el servidor web y no se podrá hacer la sincronización.

Punto 2:

Tras instalar el cliente Funambol en el ordenador desde el que queremos utilizar la sincronización, hay que configurarlo. Para ello es necesario:

  • Dirección del servidor: http://<servidor>/<ruta E-groupware/rpc.php
  • Usuario: nuestro usuario de E-groupware.
  • Contraseña: nuestra contraseña de E-groupware.

Matizaciones:

Se puede establecer una conexión con varios dispositivos. Por ejemplo yo ahora tengo sincronizados mis móviles con Windows Mobile, el Outlook del PC y el E-groupware.

Sin embargo, este esquema es lineal. Esto quiere decir que tengo configurada la conexión ActiveSync de los móviles a Outlook y de Outlook a E-groupware.

 

Actualización:

Una de las formas de saber si tenemos bien configurado el servidor rpc.php en el sitio de egroupware es acceder directamente a la direccion http://<servidor>/<instalacion_egroupware>/rpc.php

Si la configuración de Apache y egroupware es correcta, nos saldrá un mensaje como este:

You should access this URL only with a SyncML enabled device

Si no nos saliera este mensaje, hay que revisar la configuración de E-groupware, para permitir la publicación, y la configuración de apache.