Doctrine: Generar filtros IN

sábado, 22 de diciembre de 2012 Etiquetas: , ,

Introducción


En esta entrada va a ser breve, simplemente vamos a ver como añadir un filtro con el operador IN con el motor de base de datos Doctrine. No es complicado, siempre que sepas como realizarlo.

Vamos a ver primero un ejemplo en SQL para ver como funciona la condición IN, el siguiente ejemplo obtiene los usuarios que tienen configurado como lenguaje español o inglés.

SELECT u.id,u.name
FROM USERS u
WHERE u.language IN ('es','en')

Javascript: Patrón Observador

martes, 18 de diciembre de 2012 Etiquetas: , , ,

Introducción


Unos de los patrones de diseño1 que últimamente más utilizo es es el patrón observador2, también conocido como Publish/Subscribe (Publicador / Subscriptor). Este patrón indica que un objetos (subscriptor) pueda observar a otro objeto el publicador, que informa de estados o eventos que pueden interesar a los subscriptores.


El subscriptor, mediante la llamada a un método, se subscribe para ser notificado sobre algún concepto, cuando algo interesante ocurra. Sería algo similar a cuando te suscribes para recibir noticias de algún tipo de un periódico.

La principal ventaja de este patrón es conseguir que los diferentes objetos sean independientes los unos de los otros. Los generadores de los avisos no necesitan saber si hay o no algún objeto interesado ni su número, su única función es avisar que ha ocurrido algo interesante. Los subscriptores tampoco necesitan saber el objeto que genera los avisos, sólo como tiene que subscribirse.

Android: Escuchar mensajes de Android

martes, 11 de diciembre de 2012 Etiquetas: , , , ,


Introducción

El sistema Android genera una serie de mensajes que nos puede interesar "escuchar" para según que queramos realizar. Este sistema de de mensajes se ajusta al patrón de diseño Observador 1, en Android se denomina Broadcast receivers.

Android se encargará de realizar de publisher de determinados eventos que nos pueden interesar: el aparato se ha iniciado, hay conexión de red.... Nosotros debemos subscribirnos al evento que nos interesa, así seremos avisados cuando este tenga lugar, pudiendo realizar la operación que necesitemos. Además, Android nos permite configurar nuestros propios eventos, pero eso lo veremos mas adelante en otro post.

Symfony2: Añadiendo Recuerdame en pantalla de login

jueves, 6 de diciembre de 2012 Etiquetas: ,


Introducción

Cuando utilizamos autentifación de usuarios en una web, una opción común es proporcionar una opción para recordar al usuario la próxima vez que el usuario visite nuestra página. Normalmente se añade una check en el formulario de login para dar la opción al usuario si quiere que sea recordado

La configuración de este funcionamiento en Symfony2 es muy sencillo, y casi no hay que hacer trabajo por nuestra parte, me gusta :-)

Symfony2: Control Acceso a URLs

martes, 4 de diciembre de 2012 Etiquetas: ,


Introducción

Sumfony2 nos proporciona una sistema de seguridad basado en firewalls, que nos permite definer las urls a las cuales se quiere restringuir el acceso. Así podemos indicar una serie de direcciones indicando que, para acceder a ellas, el usuario debe estar autentificado. Symfony2 si el usuario no esta loggeado, automaticamente, lo redirecciona a la pantalla de login.

En esta entrada vamos a ver algunos ejemplos de configuración, y veremos como en ocasiones la tarea no resulta tan sencilla como puede parecer, ya que el número de combinaciones de url puede ser infinito, entonces, entran en acción expresiones regulares.

jQuery: Eventos en elementos añadidos dinámicamente

jueves, 29 de noviembre de 2012 Etiquetas: ,

Introducción


En ocasiones nos puede interesar enlazar un evento, por ejemplo el click, a una clase. Si utilizamos la función click, si añadimos nuevos elementos de ess tipo, veremos que no dispara el evento que hemos defino. Por suerte la solución es sencilla.

En esta entrada vamos a ver como configurar los eventos para que si se añade un elemento nuevo del tipo que se esta tratando no tengamos que realizar nada mas y funcionen los eventos con los nuevos elementos añadidos.

Symfony2: Crear funciones DQL propias para Doctrine

miércoles, 28 de noviembre de 2012 Etiquetas: , ,


Introducción

Cuando trabajamos con Doctrine, llega un momento que usando el lenguaje de consultas DQL, nos surge la necesidad de usar alguna función que no esta implementada, y que estamos acostumbrados a utilizar. Un caso común puede ser las funciones YEAR, MONTH o DAY de MySQL, para poder trabajar de forma sencilla con las fechas.

Si probamos a utilizar algunas de estas funciones en una sentencia DQL, comprobaremos que nos produce un error: la función no existe. Vamos a ver en este post como podemos crear nuestras propias funciones y configurar Symfony2 para poderlas utilizar en nuestras sentencias DQL. Si se sabe como, es sencillo y nos puede facilitar el trabajo.

jQuery: Selección con comodines

sábado, 24 de noviembre de 2012 Etiquetas:

Introducción

En ocasiones queremos seleccionar los elementos DOM, y lo único que tienen en común es parte de del nombre de algún atributo, como puede ser el id o una clase de CSS. jQuery no permite el uso de expresiones regulares (aunque hay algún plugin que lo realiza). Veamos con las opciones que nos proporciona jQuery que podemos realizar, que no es poco.

CSS: "Haciendo" un float:bottom

viernes, 23 de noviembre de 2012 Etiquetas: ,

Introducción

Hay ocasiones que queremos que en nuestra página web un elemento que se visualice siempre en la parte inferior de su contenedor. Si nunca te ha surgido la necesidad, tiempo al tiempo... Creo que lo primero que se prueba, ya te adelanto el resultado: no funciona, es lo siguiente:



#elemento{
  float:bottom;
}

Pero como ya he comentado no funciona. La solución por suerte es bastante sencilla. Vamos a ver como realizarlo.

Herramientas Programación de Chrome

miércoles, 21 de noviembre de 2012 Etiquetas: , , ,

Introducción


A la hora de programar en Javascript necesitamos pocas herramientas: un editor de texto para escribir nuestro código y un navegador para poder probarlo. El problema llega cuando nuestro código da algún error, entonces necesitamos alguna herramienta que nos diga algo sobre el error para saber como solucionarlo, sino podemos estar revisando nuestro código eternamente.

Por suerte todos los navegadores modernos han pensado en nosotros y ponen a nuestra disposición una serie de herramientas, ya sea de serie o mediante plugins, que son imprescindibles para nosotros. Vamos a ver algunas herramientas interesantes de Chrome para el desarrollo.

Leyendo Post de Blogger (II)

miércoles, 14 de noviembre de 2012 Etiquetas: , ,

Introducción


Hace unas cuantas entradas vimos las llamadas API que nos proporciona Blogger para obtener información de nuestro blog alojado en el servicio de google. También vimos una pequeña reseña de la estructura de JSon.

Ahora vamos a ver como realizar un pequeño script para obtener los titulos de todas las entradas de nuestro blog. Para ello haremos uso del API, que nos devolverá la información en formato JSon. Veremos como tratarlo. Para las llamas Ajax utilizaremos la librería de Javascript JQuery, para que sea todo sea un poco más sencillo.

Sumfony2: Traducir texto Base Datos

jueves, 8 de noviembre de 2012 Etiquetas: , ,


Introducción

En esta entrada vamos a ver como traducir pequeños textos que tenemos en base de datos de nuestro proyecto de Symfony2.
Supongamos que tenemos una aplicación donde los usuarios pueden dar de alta resultados deportivos, en la que tenemos una tabla donde indicamos  los deportes que soporta la aplicación, aunque en un futuro es posible que los ampliemos por necesidades de los usuarios, por eso creamos la tabla por sencillez. Esta tabla la mantiene el administrador del sitio, no los usuarios.

La tabla contiene la descripción, el icono y algún dato más de configuración que podamos necesitar, para el ejemplo con esos dos campos nos valdrá. En el formulario de alta de los resultados mostramos los diferentes deportes, para que los usuarios puedan seleccionar uno. Lo añadimos en nuestro formulario de la siguiente forma, utilizando para ello el tipo entity para que nos lea de la base de datos los tipos de deporte que tenemos:

Symfony2. Configurar Pantalla de login con internacionalización activada

jueves, 1 de noviembre de 2012 Etiquetas: ,

Introducción

En esta entrada trataré un problema que me ha surgido al habilitar la internacionalización de Symfony,  y es que se pierde la funcionalidad de login de usuarios que hasta el momento funcionaba correctamente.

Cómo es normal, cuando activamos la opción de internacionalización (i18n) de nuestra aplicación, queremos que el formulario de login se muestre en el idioma del usuario, con lo que la ruta pasa a ser, por ejemplo, /es/login y /es/login_check, o /en/login y /en/login_check.

Ahora nos toca modificar el archivo security.yml, que es donde se configuran los temas seguridad, como bien indica su nombre. Ahí indicamos que path de nuestra aplicación se encarga de realizar el login, login_check y logout. Si no se sabe como configurar estas tres rutas correctamente para que funcionen con diferentes idiomas, no funcionará. Veamos como hacerlo.

Ejecutar sentencias SQL con DOCTRINE

miércoles, 24 de octubre de 2012 Etiquetas: , ,

Introducción

Las aplicaciones en Symfony 2 no acceden directamente a la base de datos, sino que utilizan objetos PHP para acceder a los datos, sin ejecutar directamente las sentencias SQL. Para realizar este trabajo utiliza la librería Doctrine por defecto, aunque también se pueden utilizar otras como Propel.

La forma más habitual es realizar la obtención de datos mediante DQL, con la cual obtendremos los datos como objetos PHP listos para su utilización. En el libro The Book for Symfony 2.0 [1] se puede ver una introducción a esta forma de obtener los datos, supongo que se tiene conocimiento en el uso de DQL. En ocasiones nos puede interesar añadir en el repositorio de una entidad una consulta que no nos devuelva un objeto sino datos directamente.

Leyendo Post de Blogger (I)

miércoles, 15 de febrero de 2012 Etiquetas:

Introducción


Vamos a realizar un pequeño programa en JavaScript que nos permitirá leer las entradas de un blog que se encuentre alojado en el servicio Blogger de google. Para facilitarnos la realización de la aplicación utilizaremos la librería JQuery, que vimos en la entrada anterior.

Blogger tiene un API de llamadas que nos permiten obtener diversos datos. Nosotros obtendremos las entradas de un blog y leeremos los títulos de las entradas para mostrarlas. La lectura la realiremos utilizando los métodos de Ajax que nos proporciona JQuery

Programación JavaScript II

miércoles, 25 de enero de 2012 Etiquetas:

Introducción
Para empezar programa en javaScript, como vimos en la anterior entrada, solo se necesita un editor de texto y un navegador que realice la interpretación del código. Así que es sencillo.

El primer problema que encontramos es que según el navegador y versión de este, puede implementar alguna característica de forma un poco propia, casi siempre es el Internet Explorer el que se lo salta. Así que hay que tener en cuenta estas peculiaridades para que nuestra aplicación sea compatible con el mayor número de navegadores posibles.