<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2spanishfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Symfony por David Vega</title>
	
	<link>http://symfony.davidvega.net</link>
	<description>Tips para desarrolladores</description>
	<lastBuildDate>Tue, 08 Jun 2010 17:11:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/SymfonyPorDavidVega" /><feedburner:info uri="symfonypordavidvega" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>SymfonyPorDavidVega</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=es&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://eur.i1.yimg.com/eur.yimg.com/i/es/my/addto1.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/SymfonyPorDavidVega" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2FSymfonyPorDavidVega" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>LATIN1 con Doctrine en Symfony 1.4</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/ihJcYJhIzLU/</link>
		<comments>http://symfony.davidvega.net/2010/06/latin1-con-doctrine-en-symfony-1-4/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 17:08:39 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Symfony 1.4]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[encoding]]></category>
		<category><![CDATA[latin1]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=51</guid>
		<description><![CDATA[En un post anterior, expliqué como utilizar completamente UTF8 con Doctrine en Symfony 1.4, ahora me fue necesario adaptar un sistema para que utilizara LATIN1 (ISO-8859-1) y no funcionó de la misma forma. Entonces, para setear la codificación que utilizará Doctrine en las tablas y en las transacciones se debe establecer la opcion encoding. En [...]]]></description>
			<content:encoded><![CDATA[<p>En un post anterior, expliqué como utilizar completamente <a href="http://symfony.davidvega.net/2010/01/utf8-con-doctrine-en-symfony-1-4/">UTF8 con Doctrine en Symfony 1.4</a>, ahora me fue necesario adaptar un sistema para que utilizara LATIN1 (ISO-8859-1) y no funcionó de la misma forma.</p>
<p>Entonces, para setear la codificación que utilizará Doctrine en las tablas y en las transacciones se debe establecer la opcion <strong>encoding</strong>.</p>
<p>En el archivo: <code>databases.yml</code></p>
<pre>all:
 doctrine:
   class: sfDoctrineDatabase
   param:
     dsn:      mysql:host=********;dbname=********
     username: ********
     password: ********
     encoding: latin1</pre>
<p>Esto es muy útil para el problema que se da con el comando automático <code> "SET NAMES 'UTF8'"</code> que ejecuta Doctrine en cada conexión a la base de datos.</p>
<p>Fuente: <a href="http://www.symfony-project.org/reference/1_4/en/07-Databases">http://www.symfony-project.org/reference/1_4/en/07-Databases</a></p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/ihJcYJhIzLU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2010/06/latin1-con-doctrine-en-symfony-1-4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2010/06/latin1-con-doctrine-en-symfony-1-4/</feedburner:origLink></item>
		<item>
		<title>Formatear fechas en Symfony con DateHelper</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/wKrZWpze6qo/</link>
		<comments>http://symfony.davidvega.net/2010/02/formatear-fechas-en-symfony-con-datehelper/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 21:10:58 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Symfony 1.2]]></category>
		<category><![CDATA[Symfony 1.4]]></category>
		<category><![CDATA[datehelper]]></category>
		<category><![CDATA[fecha]]></category>
		<category><![CDATA[fechas]]></category>
		<category><![CDATA[formato]]></category>
		<category><![CDATA[helper]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=42</guid>
		<description><![CDATA[Algo muy útil para nuestras aplicaciones que manejan datos con fechas y horas, es conocer el helper DateHelper para que nos ayude en la tarea de mostrar una fecha de una forma entendible al usuario. Lo veremos con un ejemplo. Se tiene la fecha &#8220;2010/01/01 23:45:00&#8243; almacenada en algún lugar, pero nos gustaría que al [...]]]></description>
			<content:encoded><![CDATA[<p>Algo muy útil para nuestras aplicaciones que manejan datos con fechas y horas, es conocer el helper DateHelper para que nos ayude en la tarea de mostrar una fecha de una forma entendible al usuario.</p>
<p>Lo veremos con un ejemplo. Se tiene la fecha &#8220;2010/01/01 23:45:00&#8243; almacenada en algún lugar, pero nos gustaría que al usuario se le mostrara &#8220;Viernes 1 de enero de 2010 23:45&#8243;. Para esto cargamos el helper de fechas de Symfony, directamente en el template.</p>
<p><code>indexSuccess.php</code></p>
<pre>&lt;?php use_helper('Date') ?&gt;</pre>
<p>Luego, cuando queremos mostrar la fecha utilizamos la función de formato.</p>
<pre>&lt;?php echo format_datetime($fecha, 'g', 'es_CL') ?&gt;</pre>
<p>Ahora, la explicación. El primer parámetro es la variable o la fecha que queremos mostrar, el segundo es el formato que le queremos dar a la fecha mostrada (los cuales listaré al final) y por último, se elige la cultura. Los dos últimos parámetros son opcionales, y si se omiten se utilizan los predefinidos.</p>
<p>En la documentación pueden ver qué otras funciones tiene el helper: <a href="http://www.symfony-project.org/api/1_4/DateHelper">http://www.symfony-project.org/api/1_4/DateHelper</a></p>
<p>Tipos de formatos</p>
<pre>
<ul>
<li>'d' : Fecha corta</li>
<li>'D' : Fecha larga</li>
<li>'p' : Fecha largo medio</li>
<li>'P' : Fecha completa</li>
<li>'t' : Hora corta</li>
<li>'T' : Hora larga</li>
<li>'q' : Hora largo medio</li>
<li>'Q' : Hora completa</li>
<li>'f' : Fecha larga + Hora corta</li>
<li>'F' : Fecha larga + Hora larga</li>
<li>'G' : Fecha corta + Hora larga</li>
<li>'g' : Fecha corta + Hora corta</li>
<li>'i' : yyyy-MM-dd</li>
<li>'I' : yyy-MM-dd HH:mm:ss</li>
<li>'m' ó 'M' : MMMM dd</li>
<li>'r' ó 'R' : EEE, dd MMM yyyy HH:mm:ss</li>
<li>'s' : yyyy-MM-ddTHH:mm:ss</li>
<li>'u' : yyyy-MM-dd HH:mm:ss z</li>
<li>'U' : EEEE dd MMMM yyyy HH:mm:ss</li>
<li>'y' ó 'Y' : yyyy MMMM</li>
</ul>
</pre>
<p>Espero, como siempre, que esto le sea de utilidad a alguien. Se agradecen los comentarios y/o correcciones.</p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/wKrZWpze6qo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2010/02/formatear-fechas-en-symfony-con-datehelper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2010/02/formatear-fechas-en-symfony-con-datehelper/</feedburner:origLink></item>
		<item>
		<title>UTF8 con Doctrine en Symfony 1.4</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/NkpdmabERG8/</link>
		<comments>http://symfony.davidvega.net/2010/01/utf8-con-doctrine-en-symfony-1-4/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 13:45:11 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Symfony 1.4]]></category>
		<category><![CDATA[configure]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[utf8]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=37</guid>
		<description><![CDATA[Hace poco que estoy empezando a utilizar Symfony 1.4, en un nuevo proyecto, y me encontré con que establece la codificación &#8220;latin1&#8243; en forma predeterminada para la creación de las tablas MySQL, con Doctrine. Navegando encontré el siguiente código, el cual ya he comprobado, para establecer la codificación de caracteres de la conexión de Doctrine. [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco que estoy empezando a utilizar <a class="zem_slink" title="Symfony" rel="homepage" href="http://www.symfony-project.org/">Symfony</a> 1.4, en un nuevo proyecto, y me encontré con que establece la codificación &#8220;latin1&#8243; en forma predeterminada para la creación de las tablas <a class="zem_slink" title="MySQL" rel="homepage" href="http://www.mysql.com">MySQL</a>, con Doctrine.</p>
<p>Navegando encontré el siguiente código, el cual ya he comprobado, para establecer la codificación de caracteres de la conexión de Doctrine.</p>
<p>Editar el archivo <code>config/ProjectConfiguration.class.php</code></p>
<pre>class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this-&gt;enablePlugins('sfDoctrinePlugin');
  }

  <strong>public function configureDoctrine(Doctrine_Manager $manager)
  {
    $manager-&gt;setCollate('utf8_unicode_ci');
    $manager-&gt;setCharset('utf8');
  }</strong>

}</pre>
<p>Espero les sirva.</p>
<p><em>Vía <a href="http://blog.rajatpandit.com/2009/12/19/creating-utf-8-tables-in-symfony-1-4-doctrine-1-2/">Rajat Pandit</a></em></p>
<p><strong>Actualización:</strong><br />
Otra alternativa, que nos llega por <strong>nervo</strong> en los comentarios:<br />
<code>databases.yml</code></p>
<pre>all:
 doctrine:
   class: sfDoctrineDatabase
   param:
     dsn:      mysql:host=********;dbname=********
     username: ********
     password: ********
     attributes:
       default_table_type:    InnoDB
       default_table_collate: utf8_unicode_ci
       default_table_charset: utf8</pre>
<p><strong>Actualización 2:</strong><br />
Otra alternativa, que nos llega esta vez por <strong>kaskas</strong> en los comentarios:<br />
<code>schema.yml</code></p>
<pre>options:
  collate: utf8_unicode_ci
  charset: utf8
  type: InnoDB</pre>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/e5c21cfb-06f1-4510-80e6-51025d994ff6/"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/reblog_c.png?x-id=e5c21cfb-06f1-4510-80e6-51025d994ff6" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/NkpdmabERG8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2010/01/utf8-con-doctrine-en-symfony-1-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2010/01/utf8-con-doctrine-en-symfony-1-4/</feedburner:origLink></item>
		<item>
		<title>Redireccionar con .htaccess</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/FY7jeh8zVnQ/</link>
		<comments>http://symfony.davidvega.net/2009/09/redireccionar-con-htaccess/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 15:05:19 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[redireccion]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=32</guid>
		<description><![CDATA[Algo que a veces es muy necesario, pero a la vez muy sencillo de hacer es redireccionar algún directorio web a otro, o a otra dirección externa. Esto es muy útil cuando los sitios cambian de dirección y no queremos tener problemas con los buscadores. Para redireccionar simplemente se debe agregar la siguiente linea al [...]]]></description>
			<content:encoded><![CDATA[<p>Algo que a veces es muy necesario, pero a la vez muy sencillo de hacer es redireccionar algún directorio web a otro, o a otra dirección externa.</p>
<p>Esto es muy útil cuando los sitios cambian de dirección y no queremos tener problemas con los buscadores.</p>
<p>Para redireccionar simplemente se debe agregar la siguiente linea al principio del <a href="http://httpd.apache.org/docs/1.3/howto/htaccess.html">.htaccess</a>:</p>
<pre>Redirect /directorio-local/ http://www.nueva-web.com/nuevo-directorio/</pre>
<p>Así de fácil, así de bonito.</p>
<p>[Vía <a href="http://www.vidablog.com/redireccionar-con-htaccess/">VidaBlog</a>]</p>
<h4>Actualización</h4>
<p>Gracias a <a href="http://rnt.cl">RNT</a> por aclararnos que RedirectMatch puede ser más efectivo debido a que  también redirecciona el contenido dentro del directorio, cosa que no hacía el Redirect. Por lo tanto, el código para el .htaccess quedaría asi:</p>
<pre>RedirectMatch /directorio-local/(.*) http://www.nueva-web.com/nuevo-directorio/$1</pre>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/FY7jeh8zVnQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/09/redireccionar-con-htaccess/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/09/redireccionar-con-htaccess/</feedburner:origLink></item>
		<item>
		<title>sfThumbnailPlugin y Admin Generator: redimensionar imágenes</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/3rUswBTFzUk/</link>
		<comments>http://symfony.davidvega.net/2009/04/sfthumbnailplugin-y-admin-generator-redimensionar-imagenes/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 15:48:39 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Symfony 1.2]]></category>
		<category><![CDATA[admin generator]]></category>
		<category><![CDATA[imagenes]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[thumbnail]]></category>
		<category><![CDATA[thumbnails]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=22</guid>
		<description><![CDATA[En este artículo mostraré una implementación del plugin sfThumbnailPlugin para redimensionar imágenes. Idealmente usado para la creación de las previsualizaciones de fotografías en nuestros sitios web. Lo necesario: Instalar el plugin sfThumbnailPlugin symfony plugin:install sfThumbnailPlugin Tener configurada la BD, y el modelo implementado previamente con al menos un campo para guardar imágenes varchar(50). Tener un [...]]]></description>
			<content:encoded><![CDATA[<p>En este artículo mostraré una implementación del plugin <a href="http://www.symfony-project.org/plugins/sfThumbnailPlugin">sfThumbnailPlugin</a> para redimensionar imágenes. Idealmente usado para la creación de las previsualizaciones de fotografías en nuestros sitios web.</p>
<p><strong>Lo necesario:</strong></p>
<ol>
<li>Instalar el plugin <a href="http://www.symfony-project.org/plugins/sfThumbnailPlugin">sfThumbnailPlugin</a><br />
<code>symfony plugin:install sfThumbnailPlugin</code></li>
<li>Tener configurada la BD, y el modelo implementado previamente con al menos un campo para guardar imágenes varchar(50).</li>
<li>Tener un módulo creado con el &#8220;Admin generator&#8221; de Symfony</li>
</ol>
<p><strong>Procedimiento</strong></p>
<p>Primero, configuraremos el formulario en la clase correspondiente. Tomaré por ejemplo un módulo para subir noticias a un sitio web.</p>
<p>Widget</p>
<p>Usaremos el widget para subir archivo editable sfWidgetFormInputFileEditable, ya que este nos permite mostrar la imagen que se ha subido además de dar la opción de eliminarla cuando existe.</p>
<p><code>NoticiaForm.class.php</code></p>
<pre>$this-&gt;widgetSchema['imagen'] = new sfWidgetFormInputFileEditable(array(
   'label'     =&gt; 'Imagen Principal',
   'file_src'  =&gt; '/uploads/noticias/thumbs/'.$this-&gt;getObject()-&gt;getImagen(),
   'is_image'  =&gt; true,
   'edit_mode' =&gt; !$this-&gt;isNew(),
   'template'  =&gt; '&lt;div&gt;%file%&lt;br /&gt;&lt;label&gt;&lt;/label&gt;%input%&lt;br /&gt;&lt;label&gt;&lt;/label&gt;%delete% Eliminar imagen actual&lt;/div&gt;',
));</pre>
<p>Explicación de lo anterior:</p>
<ul>
<li>Label nos permite modificar la etiqueta del campo en el formulario.</li>
<li>File_src provee la ruta a la imagen ya subida, para mostrarla.</li>
<li>Is_image, si no me equivoco le permite a Symfony conocer que estamos trabajando con una imagen (si alguien sabe su utilidad, comente).</li>
<li>Edit_mode hace que la imagen sólo se muestre una vez que hayamos creado el registro, por ende cuando se ha subido ya algo.</li>
<li>Template, es el formato con el que queremos mostrar la previsualización de la imagen.</li>
</ul>
<p>Validator</p>
<p>El validador es el que finalmente sube y guarda la imagen, por lo tanto es donde debemos usar el plugin sfThumbnailPlugin.</p>
<p><code>NoticiaForm.class.php</code></p>
<pre>$this-&gt;validatorSchema['imagen'] = new sfValidatorFile(array(
   'required'   =&gt; false,
   'mime_types' =&gt; 'web_images',
   'path' =&gt; sfConfig::get('sf_upload_dir').'/noticias/original',
   'validated_file_class' =&gt; 'sfResizedFile',
));</pre>
<p>Explicación.</p>
<ul>
<li>Required, ya sabemos.</li>
<li>Mime_types permite decir qué archivos se pueden subir, los que son permitidos, en este caso sólo imágenes.</li>
<li>Path es usado para indicar la ruta donde queremos que se guarden las imágenes (de tamaño original, o ampliado).</li>
<li>Validated_file_class es el parámetro importante aquí, nos permite decir que usaremos una clase propia para manejar la imagen subida.</li>
</ul>
<p>sfResizedFile es una clase nueva, la cual obtuve desde el <a href="http://forum.symfony-project.org/index.php/mv/msg/19917/76339/">Foro de Symfony</a>. Créditos para <a href="http://forum.symfony-project.org/index.php/u/4486/">malas</a>.</p>
<p><code>/lib/sfResizedFile.class.php</code></p>
<pre>/**
 * sfResizedFile represents a resized uploaded file.
 *
 * @package    symfony
 * @subpackage validator
 * @author     Malas
 * @version    0.1
 */
class sfResizedFile extends sfValidatedFile
{

	/**
	 * Saves the uploaded file.
	 *
	 * This method can throw exceptions if there is a problem when saving the file.
	 *
	 * If you don't pass a file name, it will be generated by the generateFilename method.
	 * This will only work if you have passed a path when initializing this instance.
	 *
	 * @param  string $file      The file path to save the file
	 * @param  int    $fileMode  The octal mode to use for the new file
	 * @param  bool   $create    Indicates that we should make the directory before moving the file
	 * @param  int    $dirMode   The octal mode to use when creating the directory
	 *
	 * @return string The filename without the $this-&gt;path prefix
	 *
	 * @throws Exception
	 */
	public function save($file = null, $fileMode = 0666, $create = true, $dirMode = 0777)
	{
		if (is_null($file))
		{
			$file = $this-&gt;generateFilename();
		}

		if ($file[0] != '/' &amp;&amp; $file[0] != '\\' &amp;&amp; !(strlen($file) &gt; 3 &amp;&amp; ctype_alpha($file[0]) &amp;&amp; $file[1] == ':' &amp;&amp; ($file[2] == '\\' || $file[2] == '/')))
		{
			if (is_null($this-&gt;path))
			{
				throw new RuntimeException('You must give a "path" when you give a relative file name.');
			}

			$smallFile = $this-&gt;path.DIRECTORY_SEPARATOR.'s_'.$file;
			$file = $this-&gt;path.DIRECTORY_SEPARATOR.$file;
		}

		// get our directory path from the destination filename
		$directory = dirname($file);
		if (!is_readable($directory))
		{
			if ($create &amp;&amp; !mkdir($directory, $dirMode, true))
			{
				// failed to create the directory
				throw new Exception(sprintf('Failed to create file upload directory "%s".', $directory));
			}

			// chmod the directory since it doesn't seem to work on recursive paths
			chmod($directory, $dirMode);
		}
		if (!is_dir($directory))
		{
			// the directory path exists but it's not a directory
			throw new Exception(sprintf('File upload path "%s" exists, but is not a directory.', $directory));
		}
		if (!is_writable($directory))
		{
			// the directory isn't writable
			throw new Exception(sprintf('File upload path "%s" is not writable.', $directory));
		}

		// copy the temp file to the destination file
		<strong>$thumbnail = new sfThumbnail(100, 100, true, true, 85, 'sfGDAdapterCuttingOff');
		$thumbnail-&gt;loadFile($this-&gt;getTempName());
		$thumbnail-&gt;save($smallFile, 'image/jpeg');

		$thumbnail = new sfThumbnail(400, 400, true, true, 85, 'sfGDAdapter');
		$thumbnail-&gt;loadFile($this-&gt;getTempName());
		$thumbnail-&gt;save($file, 'image/jpeg');</strong>

		// chmod our file
		chmod($smallFile, $fileMode);
		chmod($file, $fileMode);

		$this-&gt;savedName = $file;
		return is_null($this-&gt;path) ? $file : str_replace($this-&gt;path.DIRECTORY_SEPARATOR, '', $file);
	}

}</pre>
<p>Para crear nuestros thumbnails, solo sebemos agregar cada uno como se muestra en negrita:</p>
<pre>$thumbnail = new sfThumbnail ($maxWidth = null, $maxHeight = null, $scale = true, $inflate = true, $quality = 75, $adapterClass = null, $adapterOptions = array())</pre>
<p>Si necesitamos 5 tamaños diferente, debemos agregar 5 veces la creación y guardado de un objeto sfThumbnail.</p>
<p>Finalmente, limpiar la cache del proyecto y probar cómo funciona el redimensionado de imágenes.</p>
<p>NOTA: Si aparece el error de que no existe sfGDAdapterCuttingOff, simplemente eliminar esa declaración. Se debe a que no está completamente instalado GD. En mi caso funcionó sin necesidad de usar ese parámetro.</p>
<p>Visto en  <a href="http://forum.symfony-project.org/index.php/mv/msg/19917/76339/">Foro de Symfony</a></p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/3rUswBTFzUk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/04/sfthumbnailplugin-y-admin-generator-redimensionar-imagenes/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/04/sfthumbnailplugin-y-admin-generator-redimensionar-imagenes/</feedburner:origLink></item>
		<item>
		<title>Obtener nombres de module y action</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/te2IyBUPSII/</link>
		<comments>http://symfony.davidvega.net/2009/04/obtener-nombres-de-module-y-action/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 17:48:17 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[module]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=16</guid>
		<description><![CDATA[Es bastante útil conocer en qué módulo y acción se encuentra la aplicación en un determinado momento. Para ello, los nombres se pueden obtener asi: En la acción: sfContext::getInstance()-&#62;getActionName(); sfContext::getInstance()-&#62;getModuleName(); En la vista o plantilla (template): $sf_context-&#62;getActionName(); $sf_context-&#62;getModuleName(); Gracias a Symfony Tips]]></description>
			<content:encoded><![CDATA[<p>Es bastante útil conocer en qué módulo y acción se encuentra la aplicación en un determinado momento. Para ello, los nombres se pueden obtener asi:</p>
<p>En la acción:</p>
<p><code>sfContext::getInstance()-&gt;getActionName();</code></p>
<p><code>sfContext::getInstance()-&gt;getModuleName();</code></p>
<p>En la vista o plantilla (template):</p>
<p><code>$sf_context-&gt;getActionName();</code></p>
<p><code>$sf_context-&gt;getModuleName();</code></p>
<p>Gracias a <a href="http://symfonytips.blogspot.com">Symfony Tips</a></p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/te2IyBUPSII" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/04/obtener-nombres-de-module-y-action/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/04/obtener-nombres-de-module-y-action/</feedburner:origLink></item>
		<item>
		<title>TinyMCE con admin generator en Symfony 1.2</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/HzI1eGn254U/</link>
		<comments>http://symfony.davidvega.net/2009/04/tinymce-con-admin-generator-en-symfony-12/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 07:23:00 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Symfony 1.2]]></category>
		<category><![CDATA[admin generator]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[rich]]></category>
		<category><![CDATA[TinyMCE]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=8</guid>
		<description><![CDATA[Debido a los cambios en el sistema de generación de administración en Symfony 1.2, tuve que dedicar cierto tiempo para poder lograr ver TinyMCE funcionando en mi aplicación. Los pasos a seguir para que funcione son los siguientes. Instalar el plugin sfFormExtraPlugin (http://www.symfony-project.org/plugins/sfFormExtraPlugin), el cual añade algunas funcionalidades a los formularios, entre ellas, el poder [...]]]></description>
			<content:encoded><![CDATA[<p><span class="MsgBodyText">Debido a los cambios en el sistema de generación de administración en Symfony 1.2, tuve que dedicar cierto tiempo para poder lograr ver TinyMCE funcionando en mi aplicación.</span></p>
<p>Los pasos a seguir para que funcione son los siguientes.</p>
<ol>
<li>Instalar el plugin <strong>sfFormExtraPlugin</strong> (<a href="http://www.symfony-project.org/plugins/sfFormExtraPlugin" target="_blank">http://www.symfony-project.org/plugins/sfFormExtraPlugin</a>), el cual añade algunas funcionalidades a los formularios, entre ellas, el poder utilizar TinyMCE.<a href="http://www.symfony-project.org/plugins/sfFormExtraPlugin" target="_blank"><br />
</a><code>symfony plugin:install sfFormExtraPlugin</code></li>
<li>Descargar la última version de TinyMCE desde el sitio oficial (<a href="http://tinymce.moxiecode.com/" target="_blank">http://<span class="st0">tinymce</span>.moxiecode.com/</a>).<br />
<a href="http://tinymce.moxiecode.com/" target="_blank"></a></li>
<li>El archivo descargado tiene varios directorios, solo nos interesa <code>/tinymce/jscripts/tiny_mce/</code>, la cual se debe copiar completa al directorio <code>/web/js/</code> del proyecto Symfony. Quedando finalmente como <code>/web/js/tiny_mce/</code></li>
<li>Adjuntar el script en el módulo en el cual se quiere utilizar (también puede ser para una aplicación completa). En mi caso, sólo lo necesito en un módulo creado con el admin-generator. Para esto se debe abrir el archivo <code>/apps/&lt;NOMBRE_APP&gt;/modules/&lt;NOMBRE_MODULO&gt;/config/view.yml</code> y agregar el script en la seccion de Javascripts.<br />
<code>javascripts:   [ tiny_mce/tiny_mce.js ]</code></li>
<li>Activar el directorio de TinyMCE en la configuración de la aplicación agregando lo siguiente en el archivo <code>/apps/&lt;NOMBRE_APP&gt;/config/settings.yml<br />
</code><code>all:<br />
.settings:<br />
rich_text_js_dir:   js/tiny_mce</code></li>
<li>TinyMCE ya está listo para ser utilizado. Ahora solo basta agregarlo a la clase del formulario en el que se necesita. Para esto hay que abrir el archivo de la clase del Form. Por ejemplo: <code>/lib/form/&lt;NOMBRECLASE&gt;Form.class.php</code> y configurarlo según el siguiente ejemplo:<br />
<code>public function configure()<br />
{<br />
$this-&gt;widgetSchema['nombre_campo'] = new sfWidgetFormTextarea<span class="st0">TinyMCE</span>(array(<br />
'width'  =&gt; 450,<br />
'height' =&gt; 350,<br />
'config' =&gt; 'theme_advanced_disable: "anchor,image,cleanup,help"',<br />
));<br />
}</code><br />
Las opciones principales son theme: { basic, advanced }, height, width, config. En esta última se pueden adjuntar todas las demás opciones deseadas para el editor. Ver <a href="http://wiki.moxiecode.com/index.php/TinyMCE:Index">wiki de TinyMCE</a>. En este ejemplo, se desactivan algunos botones, se puede dejar en blanco, o simplemente eliminar config.</li>
<li>Finalmente, antes de probar como ha quedado. Limpiar la cache del proyecto con el comando<br />
<code>symfony cc</code></li>
</ol>
<p>Espero sea de utilidad.</p>
<p>Artículo original: <a href="http://forum.symfony-project.org/index.php/m/67664/?srch=tinymce#msg_67664">Symfony Forums</a></p>
<p>Más información: <a href="http://www.librosweb.es/symfony_formularios/capitulo12/widgets_de_tipo_input.html">Formularios Symfony 1.2 en librosweb.es</a></p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/HzI1eGn254U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/04/tinymce-con-admin-generator-en-symfony-12/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/04/tinymce-con-admin-generator-en-symfony-12/</feedburner:origLink></item>
		<item>
		<title>Propel Error 1046: No database selected</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/07-E3WWxZy8/</link>
		<comments>http://symfony.davidvega.net/2009/04/propel-error-1046-no-database-selected/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 06:41:08 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Errores]]></category>
		<category><![CDATA[Symfony 1.2]]></category>
		<category><![CDATA[configure]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[propel]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=5</guid>
		<description><![CDATA[En Symfony 1.2, si al hacer symfony propel:build-all aparece el mensaje de error [propel-sql-exec] SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected es porque la configuración de la base de datos esta con el formato antiguo. Para configurar correctamente la base de datos en Symfony 1.2 el comando es: symfony configure:database "mysql:dbname=DBNAME;host=HOST;user=USERNAME;password=PASSWORD"]]></description>
			<content:encoded><![CDATA[<div class="entry-content">
<p>En Symfony 1.2, si al hacer <code>symfony propel:build-all</code> aparece el mensaje de error</p>
<p><code>[propel-sql-exec] SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected</code></p>
<p>es porque la configuración de la base de datos esta con el formato antiguo. Para configurar correctamente la base de datos en Symfony 1.2 el comando es:</p>
<p><code>symfony configure:database "mysql:dbname=DBNAME;host=HOST;user=USERNAME;password=PASSWORD"</code></div>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/07-E3WWxZy8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/04/propel-error-1046-no-database-selected/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/04/propel-error-1046-no-database-selected/</feedburner:origLink></item>
		<item>
		<title>Hola Mundo!</title>
		<link>http://feedproxy.google.com/~r/SymfonyPorDavidVega/~3/mB8Q9nBc1pY/</link>
		<comments>http://symfony.davidvega.net/2009/04/hola-mundo/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 04:33:32 +0000</pubDate>
		<dc:creator>David Vega</dc:creator>
				<category><![CDATA[Sin Categoria]]></category>
		<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://symfony.davidvega.net/?p=3</guid>
		<description><![CDATA[Bienvenidos a este sencillo blog que pretende compartir los &#8220;descubrimientos&#8221; que haga a medida que trabajo con este gran framework PHP, Symfoy (http://www.symfony-project.org). Comentarios y aportes son bienvenidos]]></description>
			<content:encoded><![CDATA[<p>Bienvenidos a este sencillo blog que pretende compartir los &#8220;descubrimientos&#8221; que haga a medida que trabajo con este gran framework PHP, Symfoy (<a href="http://www.symfony-project.org">http://www.symfony-project.org</a>).</p>
<p>Comentarios y aportes son bienvenidos</p>
<img src="http://feeds.feedburner.com/~r/SymfonyPorDavidVega/~4/mB8Q9nBc1pY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://symfony.davidvega.net/2009/04/hola-mundo/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://symfony.davidvega.net/2009/04/hola-mundo/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->

