Saludos nuevamente.
Implemente lo comentado, y sucede lo mismo, validate siguie devolviendo TRUE, siendo que deberia devolver lo contrario cuando ingresos letra en el campo de numeros… Como dije antes, es como que no quiere tomar la rules… Paso a detallar los codigos:
MODELO:
public function rules()
{
return array(
array('rut, tipo, celular1', 'required'),
array('celular1, celular2, telefono', 'numerical', 'integerOnly'=>true),
array('rut', 'length', 'max'=>12),
array('tipo', 'length', 'max'=>20),
array('email', 'length', 'max'=>60),
array('comentario', 'length', 'max'=>300),
array('rut, tipo, celular1, celular2, telefono, email, comentario, nombre_search, apellido_search, razon_search,contacto_search', 'safe', 'on'=>'search'),
array('celular1, celular2, telefono', 'validaGridView', 'on'=>'search'),
);
}
public function validaGridView($attr, $params){
$valor = trim($this[$attr]);
if(!is_numeric($valor)){
$this->addError($attr, "Debe ingresar solo numeros");
}
/*no se valida vacio ($valor==""), ya que es necesario para que el CGridview vuelva
a su estado inicial (con todos los registros) despues de una busqueda por filter*/
}
CONTROLADOR:
public function actionAdmin($id = null)
{
$model=new Cliente('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Cliente'])){
$model->attributes=$_GET ['Cliente'];
if(!$model->validate())
{
$this->redirect('NO pasa validacion');
}else
{
$this->redirect('INFO VALIDADO');
}
}
$this->render('admin',array(
'model'=>$model,
'tipoCliente'=>$id
));
}
y por si acaso la vista:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'cliente-grid',
'summaryText'=>false,
'dataProvider'=>$model->search(),
'filter'=>$model,
'cssFile' => Yii::app()->baseUrl . '/css/gridView.css',
'ajaxUpdate'=>true,
'columns'=>array(
'rut',
array(
'name'=>'nombre_search',
'value'=>'ucwords($data->clientePersona->nombres)',
),
array(
'name'=>'apellido_search',
'value'=>'ucwords($data->clientePersona->apellidos)',
),
array(
'name'=>'celular1',
'header'=>'Celular1',
'value'=>'$data->celular1',
'filter' => CHtml::activeTextField($model, 'celular1')
),
'celular2',
'telefono',
'email',
array(//FALTA terminar.....
'header'=>'Opciones',
'class'=>'CButtonColumn',
'template'=>'{delete}{update}{accion_nueva}', // botones a mostrar
'updateButtonUrl'=>'Yii::app()->createUrl("/nombre_modelo/update?id=$data->rut" )', // url de la acción 'update'
'deleteButtonUrl'=>'Yii::app()->createUrl("/nombre_modelo/delete?id=$data->rut" )', // url de la acción 'delete'
'deleteConfirmation'=>'Seguro que quiere eliminar el elemento?', // mensaje de confirmación de borrado
'afterDelete'=>'$.fn.yiiGridView.update("nombre-grid");', // actualiza el grid después de borrar
'buttons'=>array(
'accion_nueva' => array( //botón para la acción nueva
'label'=>'<span class="iconfa-pencil"></span> NUEVO', // titulo del enlace del botón nuevo
'url'=>'Yii::app()->createUrl("/nombre_modelo/accion_nueva?id=$data->rut" )', //url de la acción nueva
),
),
),
),
));
Resultados:
![](https://dl.dropboxusercontent.com/u/7078956/validaGridview1.png)
![](https://dl.dropboxusercontent.com/u/7078956/validaGridview2.png)
Hasta el momento la "solucion parche", es la única que presenta efectividad…
Estraño que validate no considere la regla definida… alguna idea?