Newerton,
o action foi criado, porém, ontem, percebi que realmente a chamada para o action (actionGetValorDiaria) não estava sendo feita.
Mudei disso:
...
'url'=>CController::createUrl('apartamento/getValorDiaria'),
...
para isso:
...
'url'=>CController::createUrl(Yii::app()->Controller->actionGetValorDiaria()),
...
e funcionou. Com a restrição de só ser chamado quando o form é enviado.
O meu problema é o seguinte, quando escolho a categoria ele nem se quer chama o actionGetValorDiaria, consegui pegar os valores do $_POST (como sugerido pelo scoob.junior vlw scoob
) com a função var_dump($_POST) após a mudança dita acima, mais ele só chama esse action quando eu envio o formulário, ou seja, clico no “botão submit”. Isso está certo?
Outra coisa, não quero atualizar um "select" e sim um campo textField.
i.e.: Quando eu escolher uma categoria (que é um dropDownList) ele preencha automaticamente o campo "diaria" do mesmo form (que é um textField) mais sem precisar enviar o formulário.
Algumas dúvidas estão nos comments.
Aqui está meu form
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'apartamento-form', // Este é o nome do form que tenho que usar pra atualizar um campo?
'enableAjaxValidation'=>true,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'numero'); ?>
<?php echo $form->textField($model,'numero'); ?>
<?php echo $form->error($model,'numero'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'categoria'); ?>
<?php $data = CHtml::listData(CategoriaAp::model()->findAll(),'codigo','categoria');
echo $form->dropDownList($model,'categoria',$data, array(
'empty'=>'Categoria',
'ajax'=>array(
'type'=>'post',
'dataType'=>'json',
'url'=>CController::createUrl(Yii::app()->Controller->actionGetValorDiaria()),//'apartamento/getValorDiaria'),
'update'=>'#apartamento-form[diaria]', // Isto daqui está realmente correto para atualizar o campo diaria?
'data'=>array('categoria'=>'js:$(this).val()')// Mesmo sem isso o valor do id da categoria está sendo enviado, mais o preservei assim mesmo
),
));
?>
<?php echo $form->error($model,'categoria'); ?>
</div>
// Quero que o valor da diária que está no dropDownList acima venha para o campo abaixo
<div class="row">
<?php echo $form->labelEx($model,'diaria'); ?>
<?php echo $form->textField($model,'diaria',array('size'=>10,'maxlength'=>10));?>
<?php echo $form->error($model,'diaria'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'no_pax'); ?>
<?php echo $form->textField($model,'no_pax'); ?>
<?php echo $form->error($model,'no_pax'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
Este é meu action
public function actionGetValorDiaria()
{
print_r($_POST);
$idcat = $_POST['Apartamento']['categoria'];
$data = Yii::app()->db->createCommand()
->select('diaria')
->from('categoria_ap')
->where('codigo=:id', array(':id'=>$idcat))
->queryRow(false);
echo CJSON::encode(array('diaria'=>$data[0]));
}
Tentei usar CHtml::tag como sugerido por você, mais ele criou um novo campo.
Ps.: Se eu não estiver sendo muito claro desculpe. 