Creo que esta confundido en la forma en la que trabaja una software
para la web.
El hecho de asignar un valor al $this->nombre no hace que se
actualicen los valores de los input cuando estos ya existen en la
vista actual. Es necesario volver a generar todo el HTML del
formulario para que estos se vean reflejados ó actualizarlos via DOM.
El siguiente ejemplo muestra como actualizar datos con ajax despues de
enviarlos al servidor.
apps/default/controllers/test_controller.php
<?php
class TestController extends ApplicationController {
public function indexAction(){
}
public function buscarAction(){
$this->setResponse('json');
$reglas = array(
"cedula" => array(
"filter" => "extraspaces|int",
"message" => "Por favor ingrese la cedula"
),
);
$response = array();
if($this->validateRequired($reglas)==true){
$response['status'] = 'OK';
$response['data'] = array();
//Aqui se pueden agregar más campos
$response['data'][] = array(
'field' => 'nombre',
'value' => 'Carlos'
);
$response['data'][] = array(
'field' => 'direccion',
'value' => 'Cra 19 #10-20'
);
$response['data'][] = array(
'field' => 'telefono',
'value' => '01800112721'
);
} else {
//Mostrar errores de la validación
$response['status'] = 'ERROR';
$response['messages'] = array();
foreach($this->getValidationMessages() as $message){
$response['messages'][] = array(
'field' => $message->getField(),
'text' => $message->getMessage()
);
}
}
return $response;
}
}
apps/default/views/test/index.phtml
<script type="text/javascript">
function buscar(){
//Enviar datos del formulario con AJAX
new Ajax.Request(Utils.getKumbiaURL("test/buscar"), {
parameters: $('formaUsuario').serialize(),
onSuccess: function(transport){
var response = transport.responseText.evalJSON();
if(response.status=='ERROR'){
//Mostrar errores
response.messages.each(function(message){
$('messages').update(message.text);
new Effect.Highlight(message.field);
});
} else {
//Actualizar datos cuando el estado es OK
response.data.each(function(data){
$(data.field).setValue(data.value)
});
}
}
})
}
</script>
<div id="messages"></div>
<form id="formaUsuario">
<b>Cedula:</b> <?php echo Tag::textField('cedula') ?>
<input type="button" value="Consultar" onclick="buscar()"/>
</form>
<table>
<tr>
<td align="right">Nombre</td>
<td><?php echo Tag::textField('nombre') ?></td>
</tr>
<tr>
<td align="right">Direccion</td>
<td><?php echo Tag::textField('direccion') ?></td>
</tr>
<tr>
<td align="right">Telefono</td>
<td><?php echo Tag::textField('telefono') ?></td>
</tr>
</table>
Es importante entender que siempre que se use AJAX el comportamiento
de los programas no es el normal y se debe hacer uso de javascript
para manejar el flujo de la aplicacion.