Instalar APC en Snow Leopard

Actualmente estoy integrando Doctrine 2 con Zend Framework.

A la hora de executar en la terminal doctrine orm:validate-schema me encontraba con el siguiente error:

PHP Fatal error: Call to undefined function Doctrine\Common\Cache\apc_fetch() in /vhosts/doctrine/library/Doctrine/Common/Cache/ApcCache.php on line 59

Esto sucede porque no tengo instalado el APC.

Para instalar correctamente el APC se han de indicar en Snow Leopard unos flags para que el APC se compile con la arquitectura adecuada

wget http://pecl.php.net/get/APC-3.1.3p1.tgz
tar -xvf APC-3.1.3p1.tgz
cd APC-3.1.3p1
/usr/local/zend/bin/phpize

MACOSX_DEPLOYMENT_TARGET=10.6
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

./configure --enable-apc-mmap --with-apxs=/usr/sbin/apxs --with-php-config=/usr/local/zend/bin/php-config

make
sudo make install

Luego insertamos en el php.ini

extension=apc.so

apc.enabled=1
apc.shm_segments=1
apc.shm_size=128
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

Reinicia el apache y revisa la configuración del APC con phpinfo(), verás que se ha compilado correctamente.

Actualización: Si al recargar las paginas web se os queda la página en blanco mirar los logs de php. Si os aparece:
Module 'apc' already loaded in Unknown on line 0 comentar la linea extension=apc.so poniendo un “;” (punto y comoa) delante.


Zend Form Decorator, parte I

Los formularios de Zend Framework es una de las cosas que más me gustan del framework porque te permite validar, procesar y modificar los formularios de una forma muy rápida y limpia. No obstante, de entrada queda todo muy limitado por la forma de presentar los datos con una lista de definición (dl). Aveces soy muy purista, y usar dl, dt y dd para maquetar un formulario no lo encuentro nada semántico (y tampoco con li).

La primera necesidad que me surge es cambiar el dl por un div y los dt’s y dd’s por p’s del formulario:

$form->clearDecorators()
	->addDecorator('FormElements')
	->addDecorator('HtmlTag', 	array('tag' => '', 'class' => 'zend_form'))
	->addDecorator('Form')
	->setElementDecorators(array(
		array('ViewHelper'),
		array('Errors'),
		array('Description', 	array('tag' => 'span', 'class' => 'element-description')),
		array('Label', 			array('separator' => ' ')),
		array('HtmlTag', 		array('tag' => 'p', 'class' => 'element-group')
	),
));

Zend Layout y ActionStacks de Zend Framework

En la documentación deZend Layout no acaba de quedar muy claro como se usa y suele provocar muchas confusiones si solo hacemos una lectura vertical del manual.

Zend Layout es uno de mis objetos preferidos por la versatilidad que ofrece y una vez entiendes el proceso y como combinarlo con el resto del Framework y los placeholders obtienes una gestión muy clara de las plantillas.

Vamos a suponer el siguiente layout:

<div>
<?php echo $this->render('header.phtml') ?>
<h1><?php echo $this->placeholder('h1') ?></h1>
<?php echo $this->layout()->nav ?>
<?php echo $this->layout()->content ?>
</div>

Zend Framework no funciona en MAMP PRO

Pues hoy me he de comer las palabras que dije ayer en el post que hablaba de MAMP. Hoy he querido probar MAMP Pro y me ha decepcionado.

A diferencia de la versión lite, con la Pro puedes configurar los virtual hosts sin tocar ningún fichero de conflagración ni el fichero hosts lo cual resulta muy práctico cuando no te mueves con soltura por la Terminal.

El problema en cuestión ha sido un “Fatal error: Allowed memory size of …” al ejecutar una apalicación desarrollada en Zend Framework. Por defecto PHP establece un máximo memoria de 8 Mb y cambiar este valor es tan fácil como editar el parámetro  memory_limit el php.ini.


Como manejar fechas en Zend Framework con Zend Form y Zend Validate

Validar una fecha en un formulario usando los módulos Zend Form y Zend Validate no tiene ningún misterio tan solo deberemos agregar la clase Zend_Validate_Date a la opción valdators de nuestro elemento tipo text del fomulario, algo así:


$form->addElement('text', 'date', array(
	'label'      => 'date',
	'validators' => array('date')

));

El problema lo encontramos cuando queremos usar un determinado formato de fecha y lo queremos almacenar en la base de datos. Este tipo de tareas son las que un programador siempre recopila en una función y se las guarda en su librería para facilitarse la tareas repetitivas en sus proyectos. En cierto modo estas tareas ya las hacen o deberían hacer los frameworks (pues los frameworks son al final una recopliación de funciones y clases para facilitarnos el trabajo).


Como activar los helpers con Zend_Application

Últimamente le encuentro más pegas que ventajas al modulo Zend_Application que incorpora la versión 1.9 del Zend Framework. Esta vez se trata de los helpers.

El primer problema lo encontramos a la hora de construir la aplicación con Zend_Tool, pues este no crear la carpeta pertinente. Y esto nos lleva al segundo problema y es que Zend_Tool no registra el lugar donde serán llamados los helpers.


Zend framework, como hacer un layout para cada modulo

Si estas usando la última versión de Zend Framework, la 1.9.0, y usas Zend_Application para crear aplicaciones modulares habrás notado que no puedes asignar un layout diferente para cada modulo. Después de buscar y probar diferentes métodos algunos muy complejos y que no se muy bien porque no me funcionaban encontré la solución mezclando todo lo que había visto.

Vamos a suponer que queremos crear un modulo Admin para nuestra aplicación y que usamos la jerarquía de ficheros establecida con Zend Tool. Seguramente nuestro fichero application.ini empezará algo similar a esto: