<?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>Blog cakephp en español por Hospedaxes &#187; mensajes de error</title>
	<atom:link href="http://cakephp.hospedaxes.com/tag/mensajes-de-error/feed" rel="self" type="application/rss+xml" />
	<link>http://cakephp.hospedaxes.com</link>
	<description>Blog sobre desarrollo web con cakephp en español por Hospedaxes</description>
	<lastBuildDate>Mon, 26 Apr 2010 07:11:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Validación en CakePHP 1.2 (III): Internacionalización de mensajes en el modelo</title>
		<link>http://cakephp.hospedaxes.com/validacion-en-cakephp-12-iii-internacionalizacion-de-mensajes-en-el-modelo</link>
		<comments>http://cakephp.hospedaxes.com/validacion-en-cakephp-12-iii-internacionalizacion-de-mensajes-en-el-modelo#comments</comments>
		<pubDate>Thu, 16 Apr 2009 10:37:46 +0000</pubDate>
		<dc:creator>nuria</dc:creator>
				<category><![CDATA[Validación 1.2]]></category>
		<category><![CDATA[cakephp-1.2]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[internacionalizacion]]></category>
		<category><![CDATA[mensajes de error]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[validacion]]></category>

		<guid isPermaLink="false">http://cakephp.hospedaxes.com/?p=141</guid>
		<description><![CDATA[Continuando con los posts anteriores relativos a la validación y relacionado con el post en el que se trata la localización e internacionalización de nuestras aplicaciones, explicaremos en éste cómo realizar la internacionalización de los mensajes de error. Tenemos dos opciones para implementar este funcionamiento:

Utilizar la función error del FormHelper (realizando la llamada desde la [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando con los posts anteriores relativos a la <a title="Validación en CakePHP 1.2 (I)" href="http://cakephp.hospedaxes.com/validacion-en-cakephp-12">validación</a> y relacionado con el post en el que se trata la <a title="Localización e internacionalización" href="http://cakephp.hospedaxes.com/localizacion-e-internacionalizacion" target="_blank">localización e internacionalización</a> de nuestras aplicaciones, explicaremos en éste cómo realizar la internacionalización de los mensajes de error. Tenemos dos opciones para implementar este funcionamiento:</p>
<ol>
<li>Utilizar la función <a title="Función error del FormHelper de CakePHP" href="http://api.cakephp.org/class/form-helper#method-FormHelpererror" target="_blank">error</a> del <a title="Form Helper (API CakePHP)" href="http://api.cakephp.org/class/form-helper" target="_blank">FormHelper</a> (realizando la llamada desde la vista) o la función <a title="Función invalidate del modelo de CakePHP" href="http://api.cakephp.org/class/model#method-Modelinvalidate" target="_blank">invalidate</a> del <a title="Clase Modelo de CakePHP" href="http://api.cakephp.org/class/model" target="_blank">modelo</a> (si realizamos la validación manual desde el controlador).</li>
<li>Utilizar el propio modelo como fuente de estos mensajes de error.</li>
</ol>
<p>En el primero de los casos utilizaríamos el siguiente código para la vista y el controlador respectivamente:</p>
<pre class="prettyprint">$form->error('campo', __('MENSAJE_ERROR', true));
$this->Modelo->invalidate('campo', __('MENSAJE_ERROR', true));</pre>
<p>y de esta forma buscaría esa clave del mensaje en el fichero de idioma.</p>
<p>La ventaja de hacerlo desde el modelo y no desde las vistas es que nos permite unificar los mensajes de error en cada campo y evitar la repetición de este código cuando estemos en formularios distintos que incluyan los mismos campos. El inconveniente es que en el modelo no se permite la utilización de la función __() de <a title="CakePHP" href="http://cakephp.org/" target="_blank">CakePHP</a>.</p>
<p>Para solucionar este problema será necesario modificar la clase <a title="AppModel de CakePHP" href="http://api.cakephp.org/class/app-model" target="_blank">AppModel</a> de la que extienden todos los modelos y que a su vez extiende de <a title="Clase Model en CakePHP" href="http://api.cakephp.org/class/model" target="_blank">Model</a> para redefinir la función <a title="Función invalidate del modelo de CakePHP" href="http://api.cakephp.org/class/model#method-Modelinvalidate" target="_blank">invalidate</a> (podemos ver la definición original en el <a href="http://api.cakephp.org/view_source/model/#line-2466">api de CakePHP</a>). Así, el fichero cake/libs/model/app_model.php quedaría como se muestra a continuación:</p>
<pre class="prettyprint"><code>&lt;?php
class AppModel extends Model {
   function invalidate($field, $value = true) {
      if (!is_array($this-&gt;validationErrors)) {
         $this-&gt;validationErrors = array();
      }
      $this-&gt;validationErrors[$field] = <strong>__($value, true)</strong>;
   }
}
?&gt;</code></pre>
<p>Con este simple cambio, tenemos los mensajes de error del modelo internacionalizados.</p>
]]></content:encoded>
			<wfw:commentRss>http://cakephp.hospedaxes.com/validacion-en-cakephp-12-iii-internacionalizacion-de-mensajes-en-el-modelo/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

