Hola que tal buena tarde tengo 2 días tratando de hacer esto de tabular input pero solo me sale parcialmente.
El caso es el siguiente:
Tengo una relación uno a muchos para un registro, leí el apartado de la guía de Yii de Tabular Input y lo implemente, solo que tengo un pequeño problema que no puedo resolver al recorrer el array con objetos de la misma clase "telefonos" el form me pasa los 2 pero solo uno tiene datos y el otro no. Aquí dejo el código y espero que me puedan ayudar.
El del controller
$telefonoMovil=new TelefonosUsuario;
$telefonoMovil->idTipoTelefono=1;
$telefonoOficina=new TelefonosUsuario;
$telefonoOficina->idTipoTelefono=2;
$telefonos=array($telefonoMovil,$telefonoOficina);
$valido=true;
if(isset($_POST['TelefonosUsuario'])){
foreach ($telefonos as $i=>$t){
if (isset($_POST['TelefonosUsuario'][$i])){
$t->attributes=$_POST['TelefonosUsuario'][$i];
Yii::log($t->numero.' es del index '.$i);
}
$valido=$t->validate() && $valido;
}
}
if(isset($_POST['Usuarios']))
$usuario->attributes=$_POST['Usuarios'];
$valido=$usuario->validate() && $valido;
El de la vista:
<label>Teléfono celular <span class="required">*</span></label>
<?php foreach ($telefonos as $i=>$t) : ?>
<?php if ($t->idTipoTelefono==1) : ?>
<form class="form-inline">
<?php echo CHtml::activeTextField($t,
"[$i]lada",
array(
'class'=>'input-mini',
'value'=>'044',
'tabindex'=>'4'
)
); ?>
<?php echo CHtml::activeTextField($t,
"[$i]numero",
array(
'class'=>'input-medium',
'placeholder'=>'Número',
'tabindex'=>'5'
)
); ?>
<?php echo CHtml::activeHiddenField($t, "[$i]id_usuario",
array(
'value'=>$usuario->id_crugeUser //valor temporal hasta que el usuario se da de alta en db
)
); ?>
</form>
<?php
echo CHtml::error($t, "[$i]lada", array('class'=>'help-block error'));
echo CHtml::error($t, "[$i]numero", array('class'=>'help-block error'));
?>
<?php endif; ?>
<?php endforeach; ?>
</div>
...
<div>
<label>Teléfono de oficina <span class="required">*</span></label>
<?php foreach ($telefonos as $i=>$t) : ?>
<?php if ($t->idTipoTelefono==2) : ?>
<form class="form-inline">
<?php echo CHtml::activeTextField($t,
"[$i]lada",
array(
'class'=>'input-mini',
'placeholder'=>'Lada',
'tabindex'=>'10'
)
); ?>
<?php echo CHtml::activeTextField($t,
"[$i]numero",
array(
'class'=>'input-large',
'placeholder'=>'Número',
'tabindex'=>'11'
)
); ?>
<?php echo CHtml::activeTextField($t,
"[$i]extension",
array(
'class'=>'input-mini',
'placeholder'=>'Ext.',
'tabindex'=>'12'
)
); ?>
<?php echo CHtml::activeHiddenField($t, "[$i]id_usuario",
array(
'value'=>$usuario->id_crugeUser //valor temporal hasta que el usuario se da de alta en db
)
); ?>
</form>
<?php
echo CHtml::error($t, "[$i]lada", array('class'=>'help-block error'));
echo CHtml::error($t, "[$i]numero", array('class'=>'help-block error'));
?>
<?php endif; ?>
<?php endforeach; ?>
El asunto es que el index 1 esta indefinido puesto que el log se imprime en index 0.
Espero algún aporte.
Mi versión de desarrollo es Yii 1.1.12 + Bootstrap 1.2.0