<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Backtheweb &#187; PHP</title>
	<atom:link href="http://www.backtheweb.com/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.backtheweb.com</link>
	<description>Notas y recursos de un desarrollador web</description>
	<lastBuildDate>Fri, 06 Jan 2012 01:58:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Instalar APC en Snow Leopard</title>
		<link>http://www.backtheweb.com/php/instalar-apc-en-snow-leopard.html</link>
		<comments>http://www.backtheweb.com/php/instalar-apc-en-snow-leopard.html#comments</comments>
		<pubDate>Wed, 21 Jul 2010 00:25:49 +0000</pubDate>
		<dc:creator>Jordi Touza Bonnin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[Snow Leopa]]></category>

		<guid isPermaLink="false">http://www.backtheweb.com/?p=368</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Actualmente estoy integrando <strong>Doctrine 2</strong> con<strong> Zend Framework</strong>.</p>
<p>A la hora de executar en la terminal <code>doctrine orm:validate-schema</code> me encontraba con el siguiente error:</p>
<p><code>PHP Fatal error:  Call to undefined function Doctrine\Common\Cache\apc_fetch() in /vhosts/doctrine/library/Doctrine/Common/Cache/ApcCache.php on line 59</code></p>
<p>Esto sucede porque no tengo instalado el <strong>APC</strong>.</p>
<p>Para instalar correctamente el <strong>APC</strong> se han de indicar en <strong>Snow Leopard</strong> unos flags para que el <strong>APC</strong> se compile con la arquitectura adecuada</p>
<pre><code>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
</code></pre>
<p>Luego insertamos en el <em>php.ini</em></p>
<pre><code>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</code></pre>
<p>Reinicia el <em>apache</em> y revisa la configuración del <strong>APC</strong> con <code>phpinfo()</code>, verás que se ha compilado correctamente.</p>
<p><strong>Actualización</strong>: Si al recargar las paginas web se os queda la página en blanco mirar los logs de php. Si os aparece:<br />
<code> Module 'apc' already loaded in Unknown on line 0</code> comentar la linea <code>extension=apc.so</code> poniendo un &#8220;;&#8221; (punto y comoa) delante.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backtheweb.com/php/instalar-apc-en-snow-leopard.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend framework, como hacer un layout para cada modulo</title>
		<link>http://www.backtheweb.com/zend-framework/zend-framework-como-hacer-un-layout-para-cada-modulo.html</link>
		<comments>http://www.backtheweb.com/zend-framework/zend-framework-como-hacer-un-layout-para-cada-modulo.html#comments</comments>
		<pubDate>Mon, 10 Aug 2009 23:37:50 +0000</pubDate>
		<dc:creator>Jordi Touza Bonnin</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.backtheweb.com/?p=211</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Si estas usando la última versión de <strong>Zend Framework</strong>, la 1.9.0, y usas <strong>Zend_Application</strong> para crear aplicaciones modulares habrás notado que no puedes asignar un <em>layout</em> 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.</p>
<p>Vamos a suponer que queremos crear un modulo <em>Admin </em>para nuestra aplicación y que usamos la jerarquía de ficheros establecida con <strong>Zend Tool</strong>. Seguramente nuestro fichero <em>application.ini</em> empezará algo similar a esto:<br />
<span id="more-211"></span></p>
<pre class="prettyprint"><code class="language-php">[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = layout resources.view[] = resources.view.basePath = APPLICATION_PATH "/views/"</code></pre>
<p>Y probablemente querremos añadir un par de lineas para que nuestro <em>Admin</em> tenga su propio <em>layout</em>.</p>
<pre class="prettyprint"><code class="language-php">;Modules config resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts" admin.resources.layout.layout = layout</code></pre>
<p>Claro esta que eso no es suficiente, deberemos añadir:</p>
<pre class="prettyprint"><code class="language-php">resources.modules[] =</code></pre>
<p>Este debe ser el primer recurso que cargues, de otra forma no funcionará, para ello colócalo al principio de todo, justo por debajo de <em>[production]</em>.</p>
<p>Seguramente, todo esto ya lo has echo y sabes que no funciona, que lo que sucede es que se sobrescribirá el <em>resources.layout.layoutPath</em> y no funcionará. Por ello lo que necesitamos es un <em>Plugin</em> que nos cargue el <em>layout</em> correcto:</p>
<pre class="prettyprint"><code class="language-php">// My/Controller/Plugin/Layout.php
class My_Controller_Plugin_Layout extends Zend_Controller_plugin_Abstract{
public function preDispatch(Zend_Controller_Request_Abstract $request){
$config = Zend_Controller_Front::getInstance()-&gt;getParam('bootstrap')-&gt;getOptions();
$moduleName = $request-&gt;getModuleName();
if (isset($config[$moduleName]['resources']['layout']['layout'])) {
$layoutScript = $config[$moduleName]['resources']['layout']['layout'];
Zend_Layout::getMvcInstance()-&gt;setLayout($layoutScript);
}
if (isset($config[$moduleName]['resources']['layout']['layoutPath'])) {
$layoutPath = $config[$moduleName]['resources']['layout']['layoutPath'];
$moduleDir = Zend_Controller_Front::getInstance()-&gt;getModuleDirectory();
Zend_Layout::getMvcInstance()-&gt;setLayoutPath($layoutPath);
}
}
}</code></pre>
<p>Y a continuación añadimos a nuestro <em>Bootstrap.php</em>:</p>
<pre class="prettyprint"><code class="language-php">protected function _initPlugins(){ $this-&gt;bootstrap('frontController'); $plugin = new My_Controller_Plugin_Layout(); $this-&gt;frontController-&gt;registerPlugin($plugin); }</code></pre>
<p>Con esto lo que hacemos es que registrar el <em>plugin</em> para que sea interpretado por el <strong>Zend Framework</strong></p>
<p>Dado que he usado el <em>namespace</em> <em>My</em> necesitaré registrarlo en el fichero <em>application.ini</em> añadiendo la siguiente linea:</p>
<pre class="prettyprint"><code class="language-php">autoloaderNamespaces[] = "My"</code></pre>
<p>De esta forma mi <em>application.ini</em> de la aplicación, no del módulo quedaría así:</p>
<pre class="prettyprint"><code class="language-php">[production] ;First resource to load resources.modules[] = phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 includePaths.library = APPLICATION_PATH "/../library" autoloaderNamespaces[] = "My" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts" resources.layout.layout = layout resources.view[] = resources.view.basePath = APPLICATION_PATH "/views/" ;Modules config resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" admin.resources.layout.layoutPath = APPLICATION_PATH "/modules/admin/layouts/scripts" admin.resources.layout.layout = layout</code></pre>
<p>Y listo, ya tenemos asignado un <em>layout</em> diferente para nuestro <em>Admin</em>. Para mejorar todo esto sería bueno que las especificaciones de cada módulo se declararán en el fichero <em>application.ini</em> de cada módulo, pero para eso necesitariamos crear un <em>Resource</em> que interpretará cada fichero por separado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.backtheweb.com/zend-framework/zend-framework-como-hacer-un-layout-para-cada-modulo.html/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>

