<?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; tutorial</title>
	<atom:link href="http://cakephp.hospedaxes.com/tag/tutorial/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</title>
		<link>http://cakephp.hospedaxes.com/validacion-en-cakephp-12</link>
		<comments>http://cakephp.hospedaxes.com/validacion-en-cakephp-12#comments</comments>
		<pubDate>Thu, 27 Mar 2008 08:18:26 +0000</pubDate>
		<dc:creator>nuria</dc:creator>
				<category><![CDATA[Validación 1.2]]></category>
		<category><![CDATA[cakephp-1.2]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[validacion]]></category>

		<guid isPermaLink="false">http://www.hospedaxes.com/blog-cakephp/?p=6</guid>
		<description><![CDATA[A pesar de estar todavía en la versión beta, hemos optado por hacer el desarrollo web con la versión 1.2 de CakePHP, entre otras cosas por el potente sistema de validación que posee. Explicaremos cómo realizar la validación de un formulario y los distintos tipos de validación que existen, aunque si no te gustan los [...]]]></description>
			<content:encoded><![CDATA[<p>A pesar de estar todavía en la versión beta, hemos optado por hacer el <a href="http://www.hospedaxes.com">desarrollo web</a> con la versión 1.2 de <a href="http://cakephp.org/">CakePHP</a>, entre otras cosas por el potente sistema de validación que posee. Explicaremos cómo realizar la validación de un formulario y los distintos tipos de validación que existen, aunque si no te gustan los que vienen ya implementados, <a href="http://cakephp.org/">CakePHP </a>da soporte para poder crear tus propias reglas de validación.</p>
<p>Al tema&#8230; Lo primero que hay que hacer es crear las reglas de validación en el modelo, lo haremos en la variable $validate, introduciendo ya aquí los mensajes de error para no tener que preocuparnos en cada formulario de especificarlos.<br />
En el siguiente ejemplo vemos varias reglas sencillas para un modelo que sólo tiene dos campos que queramos validar: nombre y password.</p>
<pre class="prettyprint">
var $validate = array(
   'nombre' => array(
      'valid' => array('rule' => array('alphaNumeric'),
                       'message' => 'Nombre debe ser alfanumérico'),
      'required' => array('rule' => array('minLength', '1'),
                            'message' => 'Nombre obligatorio')),
   'password'   => array(
      'required' => array('rule' => array('minLength', '1'),
                            'message' => 'Password obligatorio'),
      'length' => array('rule' => array('minLength', 6),
                            'message' => 'Longitud mínima del password de 6 caracteres')));</pre>
<p>Vemos ya en este ejemplo algunas de las distintas reglas que existen en CakePHP 1.2, pero tenemos muchas más. Son las siguientes:</p>
<ul>
<li><strong>alphaNumeric</strong>: campos alfanuméricos.</li>
<li><strong>between</strong>: aunque pueda parecer que valida que un número esté en un rango, lo que en realidad hace es comprobar que la longitud de una cadena esté en un rango:
<pre class="prettyprint">'rule' => array('between', minVal, maxVal)</pre>
</li>
<li><strong>blank</strong>: valida que el campo esté en blanco o contenga sólo espacios o tabulaciones.</li>
<li><strong>cc</strong>: valida que una tarjeta de crédito sea correcta:
<pre class="prettyprint">'rule' => array('cc', array('tipo')), donde tipo puede ser: visa, maestro...</pre>
</li>
<li><strong>comparison</strong>: para comparar valores numéricos:
<pre class="prettyprint">'rule' => array('comparison', 'tipo', val), donde tipo puede ser: "is greater”,“is less”, “greater or equal”, “less or equal”, “is less”, “equal to”, y “not equal”;y sus equivalentes >, <, >= ...</pre>
</li>
<li><strong>custom</strong>: sirve para definir tus propias expresiones regulares:
<pre class="prettyprint">'rule' => array('custom', 'expresion_regular')</pre>
</li>
<li><strong>date</strong>: valida una fecha, recibe como parámetro el formato:
<pre class="prettyprint">'rule' => array('date', 'ymd')</pre>
</li>
<li><strong>decimal</strong>: valida un número decimal recibiendo el número de decimales que tiene que tener:
<pre class="prettyprint">'rule' => array('decimal', num_decimales)</pre>
</li>
<li><strong>email</strong>: sirve para verificar que una dirección de email tiene el formato adecuado.</li>
<li><strong>equalTo</strong>: para comprobar que un campo sea exactamente igual a otro que se le pasa como parámetro:
<pre class="prettyprint">'rule' => array('equalTo', val)</pre>
</li>
<li><strong>extension</strong>: sirve para validar que el campo tiene la extensión o extensiones que se le indican como parámetro:
<pre class="prettyprint">'rule' => array('extension', <code>array('gif', 'jpeg', 'png', 'jpg')</code>)</pre>
</li>
<li><strong>file</strong>: permite comprobar que es un fichero. Todavía no está implementada.</li>
<li><strong>ip</strong>: valida que el campo es una IPv4.</li>
<li><strong>minLength </strong>y <strong>maxLength</strong>: sirve para validar que el campo tiene la longitud mínima y máxima, respectivamente, que se le pasa como parámetro:
<pre class="prettyprint">'rule' => array('minLength', <code>val</code>)  o  'rule' => array('maxLength', <code>val</code>)</pre>
<p><code></code></li>
<li><strong>money</strong>: valida que sea una cantidad monetaria. Se le pasa como parámetro &#8216;left&#8217; o &#8216;right&#8217;, en función de dónde le digamos que está el símbolo monetario.</li>
<li><strong>multiple</strong>: para validar selects múltiples. Aún no está implementado.</li>
<li><strong>numeric</strong>: se comporta igual que la función de PHP <em>is_numeric().</em></li>
<li><strong>phone</strong>: para validar un número de teléfono, se le pasa una expresión regular o null y el código del país. De momento sólo está implementado para Estados Unidos, para el resto se debe poner la expresión regular.
<pre class="prettyprint">'rule' => array('phone', null, 'us')</pre>
</li>
<li><strong>postal</strong>: igual que el anterior en sintaxis pero para validar códigos postales. En este caso, está implementado para Estado Unidos(us), Reino Unido(uk), Canada(ca), Italia(it) y Alemania (de).</li>
<li><strong>ssn</strong>: lo mismo que los dos anteriores pero para números de la seguridad social. Implementado para Estados Unidos(us), Dinamarca(dk) y Holanda(nl).</li>
<li><strong>url:</strong> para validar urls.</li>
</ul>
<p>Y ya sólo queda hacer el formulario que incluya validación. Podemos hacer uso para ello de una nueva función que viene implementada en el <em>Form</em> <em>Helper</em>, <strong>inputs</strong>:</p>
<pre class="prettyprint">
echo $form->inputs(array('legend'=>'Datos personales',
                  'nombre' => array('label'=>'Nombre *', 'size'=>32),
                  'password' => array('label'=>'Password *', 'type'=>'password')));</pre>
<p>De esta forma ya se encarga CakePHP de mostrar los errores automáticamente, al hacer el save (si no le especificamos que no nos lo haga) o bien al llamar explícitamente a la función validates del modelo. Si optas por esta segunda opción, la forma de hacer la llamada cambió con la nueva versión de Cake, y ahora se realiza de la manera siguiente:</p>
<pre class="prettyprint">
$this->Modelo->set($this->data);
$this->Modelo->validates();</pre>
<p>Yo he optado, en el caso de no poder usar la función <strong>inputs, </strong>por no usar ninguna de las funciones del <em>Form Helper</em> <strong>select</strong>, <strong>dateTime</strong>, <strong>radio</strong>&#8230; y utilizar para todo la función <strong>input</strong>, a la que se le pueden pasar atributos tipo <em>type</em>, <em>label</em>, <em>before</em>, <em>options, error</em>&#8230; (para más información ver la línea 491 del <a href="http://api.cakephp.org/1.2/form_8php-source.html">Form Helper</a>). De esta forma me muestra automáticamente los errores.</p>
<p>Por supuesto existe muchas más información en la propia <a href="http://api.cakephp.org/1.2/classes.html">API de CakePHP 1.2</a>, aunque una información menos densa la encontramos en la <a href="http://cakebaker.42dh.com/2007/01/03/validation-with-cakephp-12/">Bakery</a>, interesante sobre todo por los comentarios finales de la gente, que aportan muchas ideas.</p>
]]></content:encoded>
			<wfw:commentRss>http://cakephp.hospedaxes.com/validacion-en-cakephp-12/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

