<?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>Mundo Osukaru &#187; Symfony</title>
	<atom:link href="http://www.osukaru.es/tag/symfony/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.osukaru.es</link>
	<description>Desarrollo web y Tecnología</description>
	<lastBuildDate>Thu, 05 Aug 2010 10:51:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<script type="text/javascript">

if (typeof Meebo == 'undefined') {

Meebo=function(){(Meebo._=Meebo._||[]).push(arguments)};
(function(q){

	var args = arguments;
	if (!document.body) { return setTimeout(function(){ args.callee.apply(this, args) }, 100); }
	var d=document, b=d.body, m=b.insertBefore(d.createElement('div'), b.firstChild); s=d.createElement('script');
	m.id='meebo'; m.style.display='none'; m.innerHTML='<iframe id="meebo-iframe"></iframe>';
	s.src='http'+(q.https?'s':'')+'://'+(q.stage?'stage-':'')+'cim.meebo.com/cim/cim.php?network='+q.network;
	b.insertBefore(s, b.firstChild);

})({network:'mundoosukaru_xa39vo'});	}</script>	<item>
		<title>Jornadas sobre Symfony en Castellón</title>
		<link>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/</link>
		<comments>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 08:37:38 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=188</guid>
		<description><![CDATA[Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en la Universidad Jaume I de Castellón. Mi intención era hacer un pequeño resumen de cada una de las charlas, pero siguiendo la máxima del framework de no reinventar la rueda os invito a que leáis [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Los pasados 5 y 6 de Julio he tenido el placer de asistir a las <a href="http://decharlas.uji.es/symfony/">Jornadas sobre Symfony</a> celebradas en la Universidad Jaume I de Castellón.</p>
<p style="text-align: justify;">Mi intención era hacer un pequeño resumen de cada una de las charlas, pero siguiendo la máxima del framework de no reinventar la rueda os invito a que leáis la <a href="http://www.symfony.es/2010/07/06/cronica-de-las-primeras-jornadas-de-symfony/">crónica</a> de mi cada vez más admirado Javier Eguiluz (su charla sobre Symfony2 fue magistral).</p>
<p style="text-align: justify;">En cada una de las charlas se mostraron unas diapositivas y se grabó el audio, por lo que pronto podremos ver colgadas en internet todas las charlas, una vez más en el <a href="http://www.symfony.es/2010/07/06/todas-las-presentaciones-de-las-jornadas-symfony/">blog de Symfony.es</a>.</p>
<p style="text-align: justify;">Me gustaría agradecer el esfuerzo realizado por David Castelló para organizar estas jornadas, creo que puede sentirse muy orgulloso del resultado.</p>
<p style="text-align: justify;">Y ya un poco al margen de las jornadas en sí mismas, pues decir que me lo he pasado genial, 5 días en Castellón con sol y playa.</p>
<p style="text-align: justify;">Para acabar, dejo los vídeos de cada una de las charlas para que las podáis ver con detenimiento:<span id="more-188"></span></p>
<ul>
<li><a href='http://vimeo.com/13297305' >Introducción a Symfony</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13297305&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13297305&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13324354' >El ORM Doctrine</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13324354&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13324354&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13324539' >Domesticando las vistas</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13324539&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13324539&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325576' >Admin generator</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325576&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325576&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325855' >Arquitectura y diseño de un entorno de desarrollo</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325855&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13325958' >Caso práctico I: voota.es</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13325958&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13325958&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326079' >Caso práctico II: Symfony en CETA-CIEMAT</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326079&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326172' >Domesticando los formularios</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326172&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326256' >Plugins, no reinventes la rueda</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326256&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326256&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326324' >MongoDB y symfony</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326324&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326324&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326483' >Symfony, cloud computing y web escalables</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326483&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326483&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<li><a href='http://vimeo.com/13326625' >Symfony2</a></li>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13326625&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=13326625&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
</ul>
<img style='display:none' id="post-188-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/',title:'Jornadas sobre Symfony en Castellón',tweet:'Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en',description:'Los pasados 5 y 6 de Julio he tenido el placer de asistir a las Jornadas sobre Symfony celebradas en'})"><script type='text/javascript'>document.getElementById("post-188-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/jornadas-sobre-symfony-en-castellon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creando un plugin para Symfony</title>
		<link>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/</link>
		<comments>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 17:40:05 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=123</guid>
		<description><![CDATA[En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos utilizar esta nueva funcionalidad en otro proyecto tendríamos que volver a realizar todos los pasos que se especifican en el post. Sin embargo, existe una forma de añadir esta funcionalidad de manera que nos podamos ahorrar gran parte de estos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos utilizar esta nueva funcionalidad en otro proyecto tendríamos que volver a realizar todos los pasos que se especifican en el post. Sin embargo, existe una forma de añadir esta funcionalidad de manera que nos podamos ahorrar gran parte de estos pasos: crear un plugin.<br />
<span id="more-123"></span><br />
Los plugins permiten encapsular clases, filtros, event listeners, helpers, archivos de configuración, tareas, módulos, esquemas y extensiones para el modelo, fixtures, archivos estáticos, etc. En nuestro caso, crearemos un plugin que contenga el helper, los archivos de configuración, el módulo de ejemplo y la hoja de estilos XSL. El plugin se llamará <em>sfXSLTransformerPlugin</em>.</p>
<p style="text-align: justify;">Lo único que tenemos que hacer es crear un directorio que se llame <em>sfXSLTransformerPlugin</em> y crear allí la estructura de directorios que necesitamos, es decir, la carpeta <em>config</em> con el archivo <em>settings.yml</em>, la carpeta <em>lib/helper</em> donde incluiremos nuestro helper <em>XSLHelper.php</em>, la carpeta <em>modules</em> donde estará nuestro módulo de prueba y la carpeta <em>web/xsl</em> donde se encontrará nuestra hoja de estilos XSL.</p>
<p style="text-align: justify;">El archivo <em>settings.yml</em> contendrá el siguiente código:</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
standard_helpers: [XSL]<br />
xsl_doc:  sfXSLTransformerPlugin/xsl/collection.xsl<br />
[/css]</p>
<p style="text-align: justify;">El plugin quedaría <a href="http://www.osukaru.es/wp-content/uploads/2010/04/sfXSLTransformerPlugin.zip">así</a>. Para instalarlo en cualquier proyecto, sólo tenemos que descargarlo y descomprimirlo en el directorio <em>plugins</em>. Después, en el <em>ProjectConfiguration.class.php</em> habilitamos el plugin:</p>
<p style="text-align: justify;">[php]<br />
$this-&gt;enablePlugins(&#8216;sfDoctrinePlugin&#8217;, &#8216;sfXSLTransformerPlugin&#8217;);<br />
[/php]</p>
<p style="text-align: justify;">Con esto ya podríamos usar el plugin. Si queremos verlo en funcionamiento en el módulo de prueba, sólo tenemos que habilitar este módulo en el <em>settings.yml</em>:</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
enabled_modules: [prueba]<br />
[/css]</p>
<p style="text-align: justify;">Limpiamos la caché y ejecutamos la tarea <em>plugin:publish-assets</em> (para que los archivos de la carpeta web del plugin se publiquen en la carpeta web del proyecto) y listo.</p>
<p style="text-align: justify;">Evidentemente, la hoja de estilos XSL que viene por defecto en el plugin no nos sirve de mucho, ya que en nuestro proyecto querremos utilizar nuestra propia hoja de estilos. Podríamos editar la hoja de estilos del plugin, pero no es una buena práctica editar los archivos de un plugin, ya que si lo actualizásemos se sobreescribirían nuestros cambios. Así que lo que tenemos que hacer es crear nuestra propia hoja de estilos en el directorio <em>web/xsl</em> de nuestro proyecto y después editar el archivo settings.yml (el de nuestra aplicación, no el del plugin):</p>
<p style="text-align: justify;">[css]<br />
all:<br />
.settings:<br />
xsl_doc:  xsl/mi_hoja_de_estilos.xsl<br />
[/css]</p>
<p style="text-align: justify;">Una vez que tenemos realizado nuestro plugin, podemos subirlo a un repositorio subversion para poder llevar un control de versiones y poder actualizarlo estemos donde estemos. Por ejemplo, en <a href="http://code.google.com/hosting/">Google Code</a> se puede crear de forma gratuita un repositorio de subversion. Si tenemos instalado Tortoise en nuestro equipo, hacer un checkout del proyecto, añadir archivos al repositorio y realizar un commit es bastante intuitivo (para subir cambios al repositorio tenemos que tener permisos, por lo que se nos pedirá una contraseña que podremos encontrar en la página de configuración del proyecto de Google Code). Nuestro plugin está subido en http://osukaru-plugins.googlecode.com/svn/trunk/sfXSLTransformerPlugin.</p>
<p style="text-align: justify;">Si quisieramos distribuir nuestro plugin desde el sitio web del proyecto Symfony tendríamos un poco más de trabajo, ya que deberíamos crearlo como un paquete PEAR, escribir el archico <em>package.xml</em>, el archivo README (con sintáxis Markdown) y el archivo LICENSE y después crearnos una cuenta de usuario en Symfony y crear allí nuestro plugin.</p>
<img style='display:none' id="post-123-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/',title:'Creando un plugin para Symfony',tweet:'En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos ',description:'En el último post hemos implementado una nueva funcionalidad para un proyecto Symfony. Si queremos '})"><script type='text/javascript'>document.getElementById("post-123-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/creando-un-plugin-para-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transformaciones XSL en Symfony</title>
		<link>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/</link>
		<comments>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 15:58:32 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[XSL]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=102</guid>
		<description><![CDATA[Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony? Lo que podemos hacer es que las vistas generen XML y después en el layout transformamos este XML en XHTML mediante nuestra hoja de estilos XSL. Vamos a utilizar el mismo ejemplo que en el post anterior. Lo primero [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony?</p>
<p>Lo que podemos hacer es que las vistas generen XML y después en el layout transformamos este XML en XHTML mediante nuestra hoja de estilos XSL.<br />
<span id="more-102"></span></p>
<p>Vamos a utilizar el mismo ejemplo que en el post anterior. Lo primero que haremos es crear una carpeta 	<em>xsl</em> dentro del directorio <em>web</em>. Ahora metemos ahí los archivos de ejemplo (collection.xsl y collection.xml). En el layout, en el lugar que queramos (total, es sólo para probar) incrustamos el código de ejemplo:<br />
[php]<br />
<?php<br />
   $xslDoc = new DOMDocument();<br />
   $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>   $xmlDoc = new DOMDocument();<br />
   $xmlDoc->load(&#8220;xsl/collection.xml&#8221;);</p>
<p>   $proc = new XSLTProcessor();<br />
   $proc->importStylesheet($xslDoc);<br />
   echo $proc->transformToXML($xmlDoc);<br />
?><br />
[/php]<br />
Si ahora ejecutamos nuestro proyecto veremos que la transformación se realiza correctamente. Pero esto no es lo que queríamos, ya que estamos cargando el XML de ejemplo directamente desde un archivo y lo que queremos es cogerlo de una vista. Bien, creemos entonces un nuevo módulo y en el <em>indexSuccess.php</em> metamos el XML de ejemplo. Ahora sólo tenemos que cambiar el código de ejemplo del layout y utilizar la función <em>loadXML</em> y la variable <em>$sf_content</em>:<br />
[php]<br />
<?php<br />
   $xslDoc = new DOMDocument();<br />
   $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>   $xmlDoc = new DOMDocument();<br />
   $xmlDoc->loadXML($sf_content);</p>
<p>   $proc = new XSLTProcessor();<br />
   $proc->importStylesheet($xslDoc);<br />
   echo $proc->transformToXML($xmlDoc);<br />
?><br />
[/php]<br />
Con esto ya hemos conseguido lo que queríamos, aunque es un poco engorroso poner todo ese trozo de código en el layout, así que podemos crear un helper que nos ayude a simplificar la tarea. Para ello, dentro de la carpeta <em>lib</em> (por ejemplo, dentro de la aplicación <em>frontend</em>) creamos un nuevo directorio <em>helper</em> y dentro de él nuestro helper <em>XSLHelper.php</em> que contendrá el siguiente código:<br />
[php]<br />
<?php<br />
function XSLTransform($xmlString)<br />
{<br />
    $xslDoc = new DOMDocument();<br />
    $xslDoc->load(&#8220;xsl/collection.xsl&#8221;);</p>
<p>    $xmlDoc = new DOMDocument();<br />
    $xmlDoc->loadXML($xmlString);</p>
<p>    $proc = new XSLTProcessor();<br />
    $proc->importStylesheet($xslDoc);</p>
<p>    return $proc->transformToXML($xmlDoc);<br />
}<br />
?><br />
[/php]<br />
Ahora en nuestro <em>layout</em> sólo tenemos que poner el siguiente código:<br />
[php]<br />
<?php<br />
    <?php use_helper('XSL') ?><br />
    <?php echo XSLTransform($sf_content) ?><br />
?><br />
[/php]<br />
Y si queremos simplificar aún más, podemos hacer que nuestro nuevo helper se cargue por defecto y así no tener que incluirlo manualmente. Para ello, en el archivo <em>settings.yml</em> dentro de la carpeta <em>config</em> de nuestra aplicación <em>frontend</em> lo incluimos en una lista de helpers por defecto:<br />
[css]<br />
all:<br />
  .settings:<br />
    standard_helpers: [XSL]<br />
[/css]<br />
Así, en nuestro layout ya sólo tendremos que escribir:<br />
[php]<br />
<?php<br />
    <?php echo XSLTransform($sf_content) ?><br />
?><br />
[/php]<br />
Bien, ahora sólo nos quedaría solucionar un pequeño problema de la forma más elegante que se nos ocurra, y es que la hoja de estilos XSL con la que realizaremos las transformaciones la hemos puesto directamente en la función de nuestro helper. Podríamos incluir un nuevo parámetro en nuestra función para especificar la hoja de estilos, pero esto no sería muy ágil si hacemos muchas llamadas al helper y en un futuro cambiamos de nombre o de ruta la hoja de estilos, así que lo mejor sería que pudiésemos obtener este dato de un archivo de configuración, por ejemplo del <em>settings.yml</em>. Lo que tenemos que hacer es definir una constante en ese archivo:<br />
[css]<br />
all:<br />
  xsl_doc:    xsl/collection.xsl<br />
[/css]<br />
Y después utilizar la clase sfConfig de Symfony para recuperar el valor en nuestro helper:<br />
[php]<br />
<?php<br />
function XSLTransform($xmlString)<br />
{<br />
    $xslDoc = new DOMDocument();<br />
    $xslDoc->load(sfConfig::get(&#8216;sf_xsl_doc&#8217;));</p>
<p>    $xmlDoc = new DOMDocument();<br />
    $xmlDoc->loadXML($xmlString);</p>
<p>    $proc = new XSLTProcessor();<br />
    $proc->importStylesheet($xslDoc);</p>
<p>    return $proc->transformToXML($xmlDoc);<br />
}<br />
?><br />
[/php]</p>
<img style='display:none' id="post-102-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/',title:'Transformaciones XSL en Symfony',tweet:'Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony',description:'Ya hemos visto cómo realizar transformaciones XSL con PHP 5, pero ¿cómo aplicamos esto en Symfony'})"><script type='text/javascript'>document.getElementById("post-102-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/transformaciones-xsl-en-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Añadir información extra a SfGuardUser</title>
		<link>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/</link>
		<comments>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 11:56:55 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=93</guid>
		<description><![CDATA[Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tiempo y ganas, básicamente) y en parte también porque no tenía nada relevante que contar. Y la verdad es que el asunto sigue igual, pero acabo de leer un pequeño post de mi primo que además de ser [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tiempo y ganas, básicamente) y en parte también porque no tenía nada relevante que contar. Y la verdad es que el asunto sigue igual, pero acabo de leer un pequeño post de <a href="http://www.flai.es/">mi primo</a> que además de ser muy interesante e instructivo, parece que es el paso lógico posterior a la instalación del plugin SfDoctrineGuardPlugin, que era la última entrada que había hecho en el blog. Así, que sin más dilación, enlazo el post:</p>
<p style="text-align: justify;"><a href="http://networkedblogs.com/p26040835">Relaciones 1:1 transparentes en Doctrine</a></p>
<img style='display:none' id="post-93-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/',title:'Añadir información extra a SfGuardUser',tweet:'Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tie',description:'Hace mucho que no escribo nada, en parte por las excusas típicas de cualquier blogger (falta de tie'})"><script type='text/javascript'>document.getElementById("post-93-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/anadir-informacion-extra-a-sfguarduser/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Instalando sfDoctrineGuardPlugin</title>
		<link>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/</link>
		<comments>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 11:43:11 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=66</guid>
		<description><![CDATA[Una de las características más habituales de cualquier aplicación es la autentificación de usuarios para asegurar diferentes partes de la aplicación. El plugin sfDoctrineGuardPlugin nos facilita la implementación de esta tarea. Para instalar y habilitar este plugin tenemos que seguir estos sencillos pasos: Lo primero que tenemos que hacer es instalar el plugin en nuestro [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Una de las características más habituales de cualquier aplicación es la autentificación de usuarios para asegurar diferentes partes de la aplicación. El plugin sfDoctrineGuardPlugin nos facilita la implementación de esta tarea. Para instalar y habilitar este plugin tenemos que seguir estos sencillos pasos:<br />
<span id="more-66"></span></p>
<ul style="text-align: justify;">
<li>Lo primero que tenemos que hacer es instalar el plugin en nuestro proyecto. Podemos ejecutar la tarea de instalación:<br />
<code>symfony plugin:install sfDoctrineGuardPlugin</code><br />
para lo que tenemos que tener instalado PEAR, pero como últimamente PEAR y yo no nos hablamos, pues vamos a descargarnos el <a href="http://plugins.symfony-project.org/get/sfDoctrineGuardPlugin/sfDoctrineGuardPlugin-4.0.1.tgz">paquete</a> y lo descomprimimos en la carpeta plugins de nuestro proyecto (lo renombramos quitándole la numeración de la versión: sfDoctrineGuarPlugin).</li>
<li>Ahora activamos el plugin en el <em>archivo config/ProjectConfiguration.class.php</em> de nuestro proyecto:<br />
[php]<br />
class ProjectConfiguration extends sfProjectConfiguration<br />
{<br />
public function setup()<br />
{<br />
$this-&gt;enablePlugins(array(<br />
&#8216;sfDoctrinePlugin&#8217;,<br />
&#8216;sfDoctrineGuardPlugin&#8217;,<br />
&#8216;&#8230;&#8217;<br />
));<br />
}<br />
}<br />
[/php]</li>
<li>Reconstruimos el modelo y actualizamos la base de datos:<br />
<code>symfony doctrine:build --all</code></li>
</ul>
<p style="text-align: justify;">Ahora ya tenemos el plugin instalado. Lo siguiente que vamos a hacer es cargar los datos de prueba (que consisten en un usuario administrador):</p>
<ul style="text-align: justify;">
<li>Copiamos el fichero <em>plugins/sfDoctrineGuardPlugin/data/fixtures/fixtures.yml.sample</em> en <em>data/fixtures/sfGuard.yml</em> y cargamos los datos:<br />
<code>symfony doctrine:data-load</code></li>
</ul>
<p style="text-align: justify;">Bien, ya sólo nos queda habilitar los módulos que vayamos a utilizar y configurarlos correctamente.</p>
<ul style="text-align: justify;">
<li>En el frontend, abrimos el archivo <em>settings.yml</em> y añadimos el módulo sfGuardAuth y lo configuramos:<br />
[css]<br />
all:<br />
.settings:<br />
enabled_modules:      [default, sfGuardAuth]<br />
login_module:           sfGuardAuth<br />
login_action:           signin<br />
secure_module:          sfGuardAuth<br />
secure_action:          secure<br />
[/css]</li>
<li>Editamos la clase myUser.class.php para cambiar la clase de la que hereda:<br />
[php]<br />
class myUser extends sfGuardSecurityUser<br />
{<br />
}<br />
[/php]</li>
<li>Opcionalmente podemos cambiar el archivo routing.yml añadiendo la siguiente configuración al comienzo del archivo:<br />
[css]<br />
sf_guard_signin:<br />
url:   /login<br />
param: { module: sfGuardAuth, action: signin }</p>
<p>sf_guard_signout:<br />
url:   /logout<br />
param: { module: sfGuardAuth, action: signout }</p>
<p>sf_guard_password:<br />
url:   /request_password<br />
param: { module: sfGuardAuth, action: password }<br />
[/css]</li>
<li>En el archivo security.yml podemos asegurar los módulos que queramos o la aplicación completa:<br />
[css]<br />
default:<br />
is_secure: true<br />
[/css]</li>
</ul>
<p style="text-align: justify;">Y ya está!!! Ahora si accedemos a cualquier módulo de la aplicación y no estamos autentificados nos pedirá el usuario y el password:<br />
<a href="http://www.osukaru.es/wp-content/uploads/2009/12/login.jpg"><img class="size-full wp-image-84" title="login" src="http://www.osukaru.es/wp-content/uploads/2009/12/login.jpg" alt="login" width="265" height="129" /></a></p>
<p style="text-align: justify;">Para el backend podemos habilitar los módulos sfGuardGroup, sfGuardPermission, sfGuardUser que nos permitirán manejar usuarios, grupos y permisos.</p>
<img style='display:none' id="post-66-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/',title:'Instalando sfDoctrineGuardPlugin',tweet:'Una de las características más habituales de cualquier aplicación es la autentificación de usuar',description:'Una de las características más habituales de cualquier aplicación es la autentificación de usuar'})"><script type='text/javascript'>document.getElementById("post-66-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/instalando-sfdoctrineguardplugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nos pasamos a Symfony 1.4!!!</title>
		<link>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/</link>
		<comments>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 20:05:15 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=64</guid>
		<description><![CDATA[Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactamente las mismas características, salvo que la versión 1.3 tiene una capa de retro-compatibilidad con las versiones anteriores. Este hecho hace que precisamente la versión 1.4 sea más mucho más limpia y algo más rápida. Para empezar nuevos proyectos [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactamente las mismas características, salvo que la versión 1.3 tiene una capa de retro-compatibilidad con las versiones anteriores. Este hecho hace que precisamente la versión 1.4 sea más mucho más limpia y algo más rápida. Para empezar nuevos proyectos lo recomendable es utilizar la versión 1.4, que además será mantenido durante 3 años (hasta Noviembre de 2012) por el equipo de desarrollo de Symfony, mientras que la versión 1.3 sólo será mantenida durante un año.<br />
<span id="more-64"></span><br />
Como habíamos utilizado PEAR para instalar Symfony, pasarnos a esta nueva versión es muy sencillo, basta con desinstalar la versión actual:</p>
<p style="text-align: justify;">[shell]pear uninstall symfony/symfony[/shell]</p>
<p style="text-align: justify;">y posteriormente instalar la versión 1.4:</p>
<p style="text-align: justify;">[shell]pear install symfony/symfony-1.4.0[/shell]</p>
<p style="text-align: justify;">Como elegimos Netbeans 6.8 con soporte para Symfony como IDE para desarrollar nuestros proyectos no tenemos nada más que hacer, ya que ahora Netbeans utilizará la nueva instalación de Symfony a la hora de crear un nuevo proyecto. Entre otras cosas, veremos que al crear un nuevo proyecto ya no tenemos que habilitar el plugin para usar Doctrine, ya que éste es el que viene activado por defecto.</p>
<img style='display:none' id="post-64-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/',title:'Nos pasamos a Symfony 1.4!!!',tweet:'Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactame',description:'Ya se han publicado las versiones estables de Symfony 1.3 y 1.4. Estas dos versiones tienen exactame'})"><script type='text/javascript'>document.getElementById("post-64-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/nos-pasamos-a-symfony-1-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalando XDebug en PHP 5.3</title>
		<link>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/</link>
		<comments>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:32:09 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=56</guid>
		<description><![CDATA[Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automáticas para nuestros proyectos. Symfony nos proporciona Lime, una librería para pruebas muy simple que está basada en PHPUnit. Al escribir pruebas para nuestro código es fácil olvidar alguna porción del mismo, por eso Symfony nos proporciona la [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automáticas para nuestros proyectos. Symfony nos proporciona Lime, una librería para pruebas muy simple que está basada en PHPUnit. Al escribir pruebas para nuestro código es fácil olvidar alguna porción del mismo, por eso Symfony nos proporciona la tarea <em>test:coverage</em>, que nos dirá qué porcentaje de nuestro código está cubierto por las pruebas (aunque esto no garantice que están probadas todas las posibilidades, sólo que cada línea de nuestro código ha sido ejecutada por alguna prueba). Sin embargo, para que esta tarea funcione tenemos que tener instalado y habilitado XDebug.</p>
<p style="text-align: justify;"><span id="more-56"></span></p>
<p style="text-align: justify;">Para instalar XDebug debemos ir a a la <a href="http://xdebug.org/index.php" target="_blank">página oficial</a>, descargar los <a href="http://xdebug.org/download.php" target="_blank">archivos necesarios</a> y seguir las <a href="http://xdebug.org/docs/install" target="_blank">instrucciones de instalación</a>. En nuestro caso estamos trabajando bajo Windows y con PHP 5.3 , por lo que nos tendremos que descargar la dll correspondiente y colocarla en algún lugar de nuestro disco duro (por ejemplo bajo el directorio <em>ext</em> de la instalación de PHP). Ahora sólo tenemos que editar el archivo php.ini de la instalación de PHP 5.3 y añadir la siguiente línea al final:</p>
<pre style="text-align: justify;"><strong>zend_extension="(ruta completa a php5.3.0)\ext\php_xdebug-2.0.5-5.3-vc6.dll"</strong></pre>
<p style="text-align: justify;">Ahora sólo tenemos que asegurarnos de que la ruta al ejecutable <em>php.exe</em> está incluida en la variable de entorno <em>Path</em> y ya podemos ejecutar la tarea <em>test:coverage</em>.</p>
<img style='display:none' id="post-56-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/',title:'Instalando XDebug en PHP 5.3',tweet:'Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automát',description:'Uno de los buenos hábitos que se cogen al trabajar con Symfony es el desarrollo de pruebas automát'})"><script type='text/javascript'>document.getElementById("post-56-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/instalando-xdebug-en-php-5-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuración de Apache para un proyecto Symfony</title>
		<link>http://www.osukaru.es/programacion/configuracion-de-apache-para-un-proyecto-symfony/</link>
		<comments>http://www.osukaru.es/programacion/configuracion-de-apache-para-un-proyecto-symfony/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 22:27:24 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=48</guid>
		<description><![CDATA[Una vez que hemos creado un proyecto Symfony con Netbeans tenemos que configurar nuestro servidor Apache para que tengamos acceso a él, y lo haremos añadiendo un host virtual. Básicamente tenemos dos opciones: Añadir un host virtual que escuche por un puerto determinado. Añadir un host virtual que tenga un nombre dedicado de dominio. Para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Una vez que hemos creado un <a href="http://www.osukaru.es/2009/11/11/soporte-para-symfony-a-partir-de-netbeans-6-8/">proyecto Symfony con Netbeans</a> tenemos que configurar nuestro servidor Apache para que tengamos acceso a él, y lo haremos añadiendo un host virtual. Básicamente tenemos dos opciones:</p>
<ol style="text-align: justify;">
<li>Añadir un host virtual que escuche por un puerto determinado.</li>
<li>Añadir un host virtual que tenga un nombre dedicado de dominio.</li>
</ol>
<p style="text-align: justify;"><span id="more-48"></span>Para la primera opción simplemente tenemos que añadir las siguientes líneas al archivo <em>httpd.conf</em>:<br />
[xml]<br />
NameVirtualHost 127.0.0.1:8080</p>
<p style="text-align: justify;">Listen 127.0.0.1:8080</p>
<p style="text-align: justify;">&lt;VirtualHost 127.0.0.1:8080&gt;<br />
DocumentRoot &#8220;(1)&#8221;<br />
DirectoryIndex index.php<br />
&lt;Directory &#8220;(1)&#8221;&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;</p>
<p style="text-align: justify;">Alias /sf &#8220;(2)&#8221;<br />
&lt;Directory &#8220;(2)&#8221;&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;<br />
[/xml]<br />
Donde (1) es la ruta de la carpeta <em>web</em> de nuestro proyecto symfony y (2) es la ruta de la carpeta <em>web/sf</em> en nuestra instalación de symfony.</p>
<p style="text-align: justify;">Con esto, ya podríamos acceder a nuestro proyecto en nuestro navegador mediante <a href="http://localhost:8080/index.php" target="_blank">http://localhost:8080/index.php</a>.</p>
<p style="text-align: justify;">Sin embargo, si somos administradores del equipo, es mucho más interesante acceder mediante un nombre de dominio dedicado. Para ello, basta eliminar la declaración <em>Listen </em>y añadir la declaración <em>ServerName </em>al <em>VirtualHost</em>:<br />
[xml]<br />
NameVirtualHost 127.0.0.1:80</p>
<p style="text-align: justify;">&lt;VirtualHost 127.0.0.1:80&gt;<br />
ServerName nombreproyecto.localhost<br />
DocumentRoot &#8220;(1)&#8221;<br />
DirectoryIndex index.php<br />
&lt;Directory &#8220;(1)&#8221;&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;</p>
<p style="text-align: justify;">Alias /sf &#8220;(2)&#8221;<br />
&lt;Directory &#8220;(2)&#8221;&gt;<br />
AllowOverride All<br />
Allow from All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;<br />
[/xml]<br />
Después tenemos que acceder al fichero <em>hosts </em>que se encuentra en &#8220;C:\WINDOWS\system32\drivers\etc\&#8221; y añadir la línea:<br />
[xml]<br />
127.0.0.1         nombreproyecto.localhost<br />
[/xml]<br />
(¡OJO! Si tenemos Windows Vista o Windows 7, para editar el archivo <em>hosts </em>tendremos que ejecutar nuestro editor de textos como administradores).</p>
<p style="text-align: justify;">Ahora podemos acceder a nuestro proyecto mediante <a href="http://nombreproyecto.localhost/index.php" target="_blank">http://nombreproyecto.localhost/index.php</a>.</p>
<p style="text-align: justify;">Si además hemos activado el módulo<em> mod_rewrite</em> en nuestro servidor Apache (descomentando la línea correspondiente en el archivo <em>httpd.conf</em>), entonces únicamente tendremos que teclear <a href="http://nombreproyecto.localhost" target="_blank">http://nombreproyecto.localhost</a>.</p>
<p style="text-align: justify;">Una vez que hemos realizado la configuración en Apache, sólo nos queda ir a las propiedades de nuestro proyecto en Netbeans y añadir el <em>Project URL</em> dentro de la opción <em>Run Configuration</em> para que cuando ejecutemos el proyecto (F6) se abra el navegador con la URL que acabamos de configurar.</p>
<img style='display:none' id="post-48-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/configuracion-de-apache-para-un-proyecto-symfony/',title:'Configuración de Apache para un proyecto Symfony',tweet:'Una vez que hemos creado un proyecto Symfony con Netbeans tenemos que configurar nuestro servidor Ap',description:'Una vez que hemos creado un proyecto Symfony con Netbeans tenemos que configurar nuestro servidor Ap'})"><script type='text/javascript'>document.getElementById("post-48-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/configuracion-de-apache-para-un-proyecto-symfony/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Soporte para Symfony a partir de Netbeans 6.8</title>
		<link>http://www.osukaru.es/programacion/soporte-para-symfony-a-partir-de-netbeans-6-8/</link>
		<comments>http://www.osukaru.es/programacion/soporte-para-symfony-a-partir-de-netbeans-6-8/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 11:44:13 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=44</guid>
		<description><![CDATA[Aunque Netbeans había anunciado inicialmente que dará soporte para Symfony en la versión 7.0 del IDE, lo cierto es que ya desde las versiones de prueba de la 6.8 (en el primer Milestone y ya en la Beta) se puede comprobar esa integración. Si hemos hecho realizado la instalación de Symfony mediante PEAR, al ir [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Aunque Netbeans había anunciado inicialmente que dará soporte para Symfony en la versión 7.0 del IDE, lo cierto es que ya desde las versiones de prueba de la 6.8 (en el primer Milestone y ya en la Beta) se puede comprobar esa integración.</p>
<p style="text-align: justify;"><span id="more-44"></span>Si hemos hecho realizado la <a href="http://www.osukaru.es/2009/11/11/instalando-symfony-con-pear/">instalación de Symfony mediante PEAR</a>, al ir a Options&gt;Tools&gt;PHP&gt;Symfony veremos que  el recuadro &#8220;Symfony script&#8221; viene informado con la ruta \bin\php\php5.3.0\symfony. Ahora ya podemos crear un nuevo proyecto PHP en donde elegirimos a Symfony como framework.</p>
<img style='display:none' id="post-44-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/soporte-para-symfony-a-partir-de-netbeans-6-8/',title:'Soporte para Symfony a partir de Netbeans 6.8',tweet:'Aunque Netbeans había anunciado inicialmente que dará soporte para Symfony en la versión 7.0 del ',description:'Aunque Netbeans había anunciado inicialmente que dará soporte para Symfony en la versión 7.0 del '})"><script type='text/javascript'>document.getElementById("post-44-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/soporte-para-symfony-a-partir-de-netbeans-6-8/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando Symfony con PEAR</title>
		<link>http://www.osukaru.es/programacion/instalando-symfony-con-pear/</link>
		<comments>http://www.osukaru.es/programacion/instalando-symfony-con-pear/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 10:28:11 +0000</pubDate>
		<dc:creator>Osukaru</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://www.osukaru.es/?p=35</guid>
		<description><![CDATA[Para instalar Symfony mediante PEAR no hay más que añadir el canal de Symfony a PEAR: [shell]pear channel-discover pear.symfony-project.com[/shell] y ejecutar la orden de instalación: [shell]pear install symfony/symfony[/shell] Sin embargo, en ocasiones accedemos a Internet a través de un proxy, y esto hay que indicarselo a PEAR mediante la instrucción: [shell]pear config-set http_proxy http://user:pass@domain:port[/shell] document.getElementById("post-35-blankimage").onload();]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Para instalar Symfony mediante PEAR no hay más que añadir el canal de Symfony a PEAR:<br />
[shell]pear channel-discover pear.symfony-project.com[/shell]<br />
y ejecutar la orden de instalación:<br />
[shell]pear install symfony/symfony[/shell]<br />
<span id="more-35"></span><br />
Sin embargo, en ocasiones accedemos a Internet a través de un proxy, y esto hay que indicarselo a PEAR mediante la instrucción:</p>
<p style="text-align: justify;">[shell]pear config-set http_proxy http://user:pass@domain:port[/shell]</p>
<img style='display:none' id="post-35-blankimage" onload="Meebo('discoverSharable', {element: ((this.parentNode.className.match('post')) ? this.parentNode : this.parentNode.parentNode) ,url:'http://www.osukaru.es/programacion/instalando-symfony-con-pear/',title:'Instalando Symfony con PEAR',tweet:'Para instalar Symfony mediante PEAR no hay más que añadir el canal de Symfony a PEAR: [shell]pear ',description:'Para instalar Symfony mediante PEAR no hay más que añadir el canal de Symfony a PEAR: [shell]pear '})"><script type='text/javascript'>document.getElementById("post-35-blankimage").onload();</script>]]></content:encoded>
			<wfw:commentRss>http://www.osukaru.es/programacion/instalando-symfony-con-pear/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
