Cómo usar componentes de Zend Framework fuera del MVC

Uno de los caminos para crear una "plataforma de desarrollo" (y bajar costos de desarrollo) es tener unificadas todas las herramientas que usamos a la hora de desarrollar nuestros sistemas.

Por ejemplo, no deberíamos tener distintas clases de acceso a base de datos o generación de logs según el entorno que estemos trabajando (a menos que tengas una razón coherente para hacerlo ;-) ). Si desarrollas dentro de la misma empresa / proyecto tanto sistemas web tradicionales, sistemas de gestión, páginas wap, o aplicaciones de envío SMS (como es en mi caso), no debería haber razón para tener código duplicado.

Una "plataforma" debería servir para eso, tener ya resuelto los problemas triviales y habituales para concentrarnos solo en los problemas nuevos y no triviales.

Una de las grandes ventajas de Zend Framework es poder usar cada uno de sus componentes fuera de la estructura tradicional de MVC, evitando necesariamente tener que usar un controller, modelo y vista. Si ya usas Zend Framework, puedes aprovechar los componentes también de forma aislada, lo que reusas código y conocimiento en el desarrollo de sistemas (aprendes a usar un componente y lo sigues usando en todos los sistemas).

Un caso puntual es poder eliminar todas las clases "artesanales" que hoy día tenemos para la generación de logs y empezar a uzar Zend_Log.

"La forma de hacerlo"

La primera, es instalar en nuestros servidores en un lugar estandarizado las "librerías", como por ejemplo en /var/www/library instalar Zend Framework.

Luego, deberíamos crear un archivo de configuración para que nuestra aplicación pueda encontrar fácilmente los componentes de Zend. Mi sugerencia es que usen la función de "autoload" (Zend_Loader), así no tienen que estar viendo de llamar una a una las clases que necesitan cada uno de los componentes.

config.php


set_include_path
(
'.' .
PATH_SEPARATOR . '/var/www/library' .
PATH_SEPARATOR . get_include_path()
);

include
"Zend/Loader.php";
Zend_Loader::registerAutoload();



Y así incluiríamos ahora la clase Zend_Log en nuestros desarrollos:

test.php

require_once 'config.php';

$writer = new Zend_Log_Writer_Stream('/tmp/test.log');

$logger = new Zend_Log();
$logger->addWriter($writer);

$logger->log('This is a log message!', Zend_Log::INFO);


Listo, ya tenemos un scripts en PHP común y corriente, pero usando ahora un componente del framework Zend.

Así deberíamos poder hacerlo con todos los componentes básicos (base de datos, logs, envío de emails, config, etc), y evitar tener que reinventar la rueda.

¿Te parece útil?

¿Una nueva razón para usar Zend? ¿otros frameworks te permiten hacer lo mismo?

"La decadencia de forosdelweb.com", parte II

Si luego de leer varios comentarios "políticamente correctos" (aunque por dentro estén insultándote), este último comentario terminó de dejar claro cómo son verdaderamente las cosas (que error ni error):



Veo que la filosofía es "estás conmigo o contra mi", no hay puntos medios ni sincero reconocimiento de errores, pura y llana "cortina de humo".

Al final de cuentas:

¿Todo esto fue una forma indirecta de intentar sacarme del foro de POO de PHP?

... el tiempo dirá.

La decadencia de forosdelweb.com

Algunos lectores han seguido mi twitter ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], más comentarios de usuarios, etc) y se han sorprendido tanto como yo de mi "degradación" en forosdelweb.com, donde los "moderadores" del área de POO para PHP votaron para sacarme el rol de "colaborador" y pasarme a "usuario común".

Haciendo un resumen de los hechos, mi sorpresa fue mayor cuando me doy cuenta que hacía por lo menos 20 días que no participaba "colaborando" en la respuesta de dudas de los usuarios (los cursos me tienen un poco ocupado), que a la fecha y luego de 4 años, suman más de 900.

Aún recuerdo el primer mensaje que me envió cvander (el propietario del sitio, maestrosdelweb.com) anunciando que pasaba a grado de "colaborador":

30-ene-2007, 17:18
Moderador
cvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassiecvander es mas bueno que la perra Lassie

Avatar de cvander

Fecha de Ingreso: noviembre-2002
Ubicación: Ciudadano del mundo
Mensajes: 10.082
Enviar un mensaje por MSN a cvander
cvander está desconectado
Colaborador del foro

Un saludo.

Debido a tu trayectoria a forosdelweb.com y la recomendación de algunos moderadores, te hemos otorgado el rango de "colaborador".

Este rango te otorga algunas ventajas en el foro (más capacidad de mensajes privados, envío de adjuntos y otros), así como un foro privado donde los colaboradores hablan de todo tipo de temas personales, así como envían sugerencias sobre el foro.

No hay ninguna responsabilidad con la leyenda, sino es simplemente un agradecimiento por tu apoyo.

Un saludo.
__________________
- Christian Van Der Henst S. [twitter: @cvander]
Maestros del Web



El tiempo pasó y me entero a través de un sintético mensaje con el título de "colaborador" lo siguiente:

31-mar-2009, 11:54
GatorV
$this->role('moderador');
GatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra LassieGatorV es mas bueno que la perra Lassie

Avatar de GatorV

Fecha de Ingreso: mayo-2006
Ubicación: /home/ags/
Mensajes: 20.286
GatorV está desconectado
Colaborador

Que tal Enrique,

Hubo varios reportes de "quejas" ya sabes, y la administración del foro decidio que lo mejor para las dos partes (FDW y tu) lo mejor era pasarte nuevamente al grupo de usuarios normal.

Espero entiendas el porque de esta decisión y creo yo en lo personal es lo mejor para las dos partes.

Saludos.
__________________
Blog Web


Nota: el resaltado es mío.

Mi sorpresa a sido mayúscula, amén de que no veo tan "dramático" perder una seudo-calificación que puedan darte de uno de los tantos foros que pululan en la web, me indigna en la forma que se procedió, sin transparencia y dar la cara (lo peor es que conozco a algunos personalmente), ya que luego de intercambiar varios mensajes con GatorV (actual moderador del área de POO en forosdelweb.com) me deja claro que el solo es el "mensajero" y "otros moderadores" (que aparentemente no puedo saber los nombres) decidieron mi "degradación".

También he preguntado las razones concretas pero solo recibo un genérico "quejas de usuarios", no sé cuales, tampoco la cantidad de usuarios ni la cantidad de quejas, ni cuantos moderadores votaron en mi contra, ni cuantos fueron los votos, ni tampoco hay forma de réplica o defensa alguna.

Aclaraciones varias


Creo que todo el mundo sabe que al participar en un foro se dan discusiones acaloradas y es casi imposible que no existan quejas, a menos que seas un provocador nato que solo busca el conflicto y no aporta absolutamente nada.

En mi contra puedo decir que tengo un humor bastante irónico y que no puedo caerle bien a todo el mundo (creo que los demás me toman más en serio de lo que me tomo yo mismo), y más de una vez rezongué a usuarios por su necedad de leer un manual o por repetir conceptos errados sin razonarlos (principalmente de los que se venden como "expertos"). Además, es casi imposible que luego de unos años de volverse "conocido en el ambiente de PHP" no encuentre tanto seguidores como detractores, en igual proporción, lo que genera que por cada palabra que diga tenga 2 personas que están de acuerdo y 2 que simplemente buscarán atacarme a título personal (algo que se ha visto muy seguido en forosdelweb.com).

A mi favor puedo decir que son más las contribuciones que he brindado al foro que las discusiones etéreas en las que he participado, y así lo tienen claro los administradores (GatorV) que en múltiples situaciones le he avisado para que tome cartas en el asunto.

Lamentablemente mi colega (quién estimo mucho desde hace años) se ha tomado la moderación tan al extremo que no se puede comentar ningún asunto que exista un mínima discusión "sana y normal", que esta es borrada, por lo tanto el último año sentía "reserva" de decir algo, ya que seguro iba a ser "censurado", igual que con los demás usuarios.

Respuesta Oficial de Forosdelweb.com


Luego de varios intercambios con mi amigo GatorV, ya que la verdad sigo "indignado" de cómo procedieron, nuevamente, por la forma y no en sí por el resultado (un cambio de "tipo de usuario").

Recibo esta "diplomática" respuesta del responsable de forosdelweb.com, Cvander, que en resumen dice:

"las formas en las que a veces contestas han causado conflictos con otros usuarios que simplemente no comprenden tu sarcasmo, ni lo políticamente incorrecto que sueles ser a veces, generando reportes en varios de tus mensajes. Por esto mismo, algunos moderadores mencionaron cuál sería la forma de proceder, cómo podian darte una infracción pues normalmente los colaboradores no causan estos conflictos..."

Si esto fuera un trabajo diría que esto es un "despido indirecto" ;-)

Al que resumo (los intercambios con Cvander continuaron) que la razón fundamental se debe a que les doy mucho trabajo de moderación, mis respuestas generan un conflicto que no pueden manejar, en contraoposición a los aportes que di y puedo dar en el foro de "POO PHP".

Interesante. Lo primero que me preocupa es, habiendo tantos problemas para resolver, tengan que hacer este tipo de "penalizaciones" con un usuario que aporta constantemente al foro, y posteriormente no se cuestionen si "ese trabajo que les doy" no se debe al exceso de moderación y censura que existe en el foro.

Aunque verdaderamente dudo ser "el colaborador conflictivo del foro".

Para resumir, copio mi respuesta a Cvander:

31-mar-2009, 20:36
enriqueplace
enriqueplace merece que le prestes tu consolaenriqueplace merece que le prestes tu consola

Avatar de enriqueplace

Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 960
Enviar un mensaje por Skype™ a enriqueplace
enriqueplace esta en línea ahora
Respuesta: Tema de colaborador

Tal y como se lo comenté a GatorV

1 - Me entero por la espalda, sin mediar ningún tipo de comunicación previa que "un grupo de notables" a votado mi "degradación" como usuario dentro de FOROS

2 - Se argumenta "quejas" pero no hay "pruebas" en base a cuantos usuarios ni a qué tipo de quejas ni si estas son justificadas o no, lo decidieron unos pocos en donde no tuve ninguna ingerencia.

3 - No hay forma de "defensa" ni de respuesta, nadie advierte ninguna situación (mayor es mi sorpresa de estar casi ausente por 20 días de los foros).

4 - Lo único que dan como mensaje es que prefieren el "silencio" en los foros a una discusión al respecto. Se ha distorsionado gravemente el foro de POO ya que no hay aportes de nivel y mediante una moderación "excesiva" ya casi nadie puede discrepar con nadie por miedo a ser eliminado (en lo personal ya fueron varios mensajes mios borrados y no los justifico).

5 - Posteriormente me notifican de este cambio de "grado", nadie sabe responder nada, dicen que es "por mi bien" y que hable con "cvander". Argumentos y transparencia "cero".

Vergüenza ajena, no por el hecho en sí de una seudo-categorización en un foro, es por la forma en que se ha hecho.

La verdad que no entiendo como GatorV apoya esto, me molesta el hecho de cómo procedieron, como cobardes y completamente abusando de una autoridad que no tienen sobre mi proceder ("he sido juzgado").

Todo esto me parece sumamente arbitrario, subjetivo y poco serio.




Para empeorarla, nunca tuve respuesta.

En resumen

Luego de cuatro años de participar en el foro de PHP de forosdelweb.com, donde muchos de mis respuestas se transformaron en post de este mismo blog, si bien ahora no he tenido tiempo de seguir participando, actualmente no tengo motivos para seguir haciendo el mismo trabajo de forma desinteresada, ya que los mismos responsables del foro desalientan a los propios colaboradores.

Con estas actitudes, muy difícil que alguien quiera colaborar.

Enlaces relacionados: no te pierdas la segunda parte, la respuesta "oficial y final" de Cvander

Nueva versión del libro: "POO para PHP5" (edición "abril 2009")




Ya se encuentra disponible la nueva versión del libro (v1.8) que incluye todas las correcciones y sugerencias de los lectores desde febrero 2009 y un nuevo anexo "Lo Nuevo en PHP5" donde se empieza a abordar cada una de las nuevas características de PHP5, comentadas y con ejemplos prácticos para aprender a sacarle el máximo de provecho (pueden acceder a nuevos capítulos de ejemplo del libro).

Recordar las tres versiones del libro:
  1. Edición económica: 30 USD (2 meses de actualizaciones, material extra y consultas sobre dudas)
  2. Edición estándar: 50 USD (4 meses)
  3. Edición extendida: 60 USD (6 meses)
El medio de pago oficial es a través de Paypal y el medio alternativo es a través de Western Union. Una vez confirmado el pago (dentro de las primeras 24hs) se hace envío del libro digital (pdf) y se da acceso a usuarios.surforce.com para poder usar todos los servicios asociados.

A la fecha se llevan vendidos 75 libros
, entre alumnos y no alumnos de los Cursos de POO.

Recuerda: para el segundo semestre del año se volverán a abrir los cursos de POO, los cuales están basados en el libro pero abordando nuevos trabajos semanales para profundizar los conceptos tratados.


Más información

¿Qué nombres ponerles a nuestros componentes en un framework MVC?

Este es un tema por el que he pasado un tiempo analizando y no encontrando información "oficial" explícita sobre cómo debemos nombrar nuestros módulos/controllers, principalmente si usar palabras en "singular" o en "plural" (si alguien encuentra, me avisa). A veces, la forma de llegar a un criterio es buscar ejemplos en otros proyectos y aprender de la experiencia de otros, pero no fue el caso, ya que podemos encontrar tanto como (inglés o castellano):
  • "usuarios" o "usuario"
  • "facturas" o "factura"
  • "stocks" o "stock"
  • "proveedores" o "proveedor"
  • "páginas" o "página"
  • etc
Si alguien tiene la misma duda, paso a comentarles mis criterios para que tengan una referencia más a la hora de decidirse ;-)

En lo personal estaba usando el siguiente criterio (que no quiere decir que sea correcto ni el mejor): que la url fuera coherente con su lectura, es decir, prefiero que diga:
  • surforce.com/usuarios/ficha/ver/id/1
Y no
  • surforce.com/usuario/ficha/ver/id/1
Ya que es funcionalidad (módulo) que se aplica a "todos" los usuarios y no a un usuario, y el controller afecta a un solo usuario (y así ajustar los nombres de los elementos).

Ejemplos:
  • A pesar que existe en la documentación referencia a los módulos, no especifica exactamente cómo nombrarlos, aunque muestra ejemplos tanto en singular como en plural.
  • En los mismos ejemplos muestran "blog" y "news", por lo que yo lo analizaría por el lado de "si es un módulo de blog (uno) lo usaría en singular, pero si es un módulo que maneja varios blogs (más de uno), lo llamaría blogs" ("módulo de blogs").
Usando un poco el sentido común, sin pensar en MVC ni en ZF, ¿si necesitara crear módulos para un sistema, qué nombres les daríamos?
  1. Sistema de Gestión de Usuarios -> modulo "usuarios"
  2. Sistema de Gestión de Administración -> modulo "admin"
  3. Sistema de manejo de Stock -> modulo "stock"
  4. Sistema de manejo de Ventas -> módulo de "ventas"
Indistintamente de lo que hagan otros proyectos (como Magento, que veo que muchos usan como único referente), tendríamos que analizar más proyectos o encontrar algo "oficial" de la propia Zend.

Mi criterio sobre el tema de "nombres":
  • Una cosa es el nombre de un Model, donde yo usaría lo mismo que el criterio general de nombre de clases de POO, en singular.
  • Otra cosa son los controllers, que actualmente estoy usando más que nada el criterio de "url usable", que quede coherente a la lectura (no es lo mejor -sé que se pueden configurar las url's- pero tampoco encontré una documentación oficial que aclare este tema), por lo tanto si se aplica a uno o a muchos, usaría singular o plural.
  • Y otra cosa es el nombre del módulo, que creo también pasa por el tema de nuestra decisión de nombres, más que un tema de nombre de Clase o de Controller (por más que todos son "clases", son "especiales" y específicas del MVC y de Zend), también usaría singular o plural.
Creo que por ahí pasa la discusión, no sé que piensan ustedes y qué criterios usan para definir los nombres de sus componentes, sean tanto en Zend como en otros frameworks que usan MVC.

Soy todo oídos ;-)

Entradas populares