problema com view e 2 models

Boa tarde pessoal,

Reli o código dezenas de vezes para tentar ver algum problema e não consegui.

o _form.php é esse:




<div class="form">


<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'endereco-form',

	'enableAjaxValidation'=>true,

)); ?>

    

	<?php echo $form->errorSummary(array($model,$modelBairro)); ?>

    

	<div class="row">

		<?php echo $form->labelEx($model,'logradouro'); ?>

		<?php echo $form->textField($model,'logradouro',array('size'=>60,'maxlength'=>100)); ?>

		<?php echo $form->error($model,'logradouro',array('class'=>'erroneous')); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'numero'); ?>

		<?php echo $form->textField($model,'numero'); ?>

		<?php echo $form->error($model,'numero',array('class'=>'erroneous')); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'complemento'); ?>

		<?php echo $form->textField($model,'complemento',array('size'=>60,'maxlength'=>100)); ?>

		<?php echo $form->error($model,'complemento',array('class'=>'erroneous')); ?>

	</div>


	<div class="row">

		<?php echo CHtml::label('Estado',''); ?>

        <span class="required">*</span>

		<?php echo CHtml::dropDownList(

                                        'nEstado',

                                        '',

                                        CHtml::listData(Estado::model()->findAll(), 'id', 'nome'),

                                        array(

                                            'empty'=>'estado',

                                            'ajax' => array(

                                                'type'=>'POST',

                                                'url'=>CController::createUrl('endereco/DynamicCitiesAddress'),

                                                'update'=>'#nCidade',

                                                )));

        ?>

	</div>


	<div class="row">

		<?php echo CHtml::label('Cidade',''); ?>

        <span class="required">*</span>

		<?php echo CHtml::dropDownList('nCidade','', array(),array(

                                                                'empty'=>'cidade',

                                                                'ajax' => array(

                                                                            'type'=>'POST',

                                                                            'url'=>CController::createUrl('endereco/DynamicNeighborhoodAddress'),

                                                                            'update'=>'#neighborhood',

                                                                )));

        ?>

	</div>

    <div class="row">

        <?php echo $form->labelEx($modelBairro,'nome'); ?>

        <span id="neighborhood">

            <?php echo $form->textField($modelBairro,'nome'); ?>

        </span>

		<?php echo $form->error($modelBairro,'nome',array('class'=>'erroneous')); ?>

	</div>


	<div class="row">

		<?php echo $form->textField($model,'idBairro'); ?>

	</div>


	<div class="row">

		<?php echo $form->labelEx($model,'cep'); ?>

		<?php echo $form->textField($model,'cep'); ?>

		<?php echo $form->error($model,'cep',array('class'=>'erroneous')); ?>

	</div>


	<div class="row buttons">

        <?php echo CHtml::button('Voltar',array('onclick'=>'window.history.back()','class'=>'submit')); ?>

		<?php echo CHtml::submitButton($model->isNewRecord ? 'Gravar' : 'Gravar',array('class'=>'submit')); ?>

	</div>


<?php $this->endWidget(); ?>


</div><!-- form -->



o create.php:


<?php echo $this->renderPartial('_form', array('model'=>$model,'modelBairro'=>$modelBairro)); ?>

e o controller EnderecoController.php




public function actionCreate()

{

	$model=new Endereco;

	$modelBairro=new Bairro;


	// Uncomment the following line if AJAX validation is needed

	 $this->performAjaxValidation(array($model,$modelBairro));


	if(isset($_POST['Endereco']))

	{

		$model->attributes=$_POST['Endereco'];

		$modelBairro->attributes=$_POST['Bairro'];


		if($model->save()){

			$owner = Yii::app()->user->id;

            $this->redirect(array('view','id'=>$model->id));

        }

	}


	$this->render('create',array(

		'model'=>$model,

        'modelBairro'=>$modelBairro,

	));

}


?>



O navegador me retorna o seguinte erro:

Undefined index: Bairro

na linha

&#036;modelBairro-&gt;attributes=&#036;_POST['Bairro'];

Já fiz outros forms com dois Models em outros lugares do projeto dessa mesma forma e funciona normal…

Posta a sua view gerada aqui pra dar uma olhada.

Tá aí a view gerada. Só modifiquei as tabulações, pra organizar e ficar mais legível…




<div class="editPanelContent grid_21 prefix_3">

<h1>Adicione um endereco</h1>

<div class="form">

<form id="endereco-form" action="/gpscondominial/index.php/endereco/create/14" method="post">

	<p class="note">Campos com <span class="required">*</span> são obrigatórios.</p> 

        

	<div id="endereco-form_es_" class="errorSummary" style="display:none">

        <p>Por favor, corrija os seguintes erros:</p>

        <ul><li>dummy</li></ul>

    </div>    

    

    <div class="row">

        <input value="14" name="Endereco[idEmpresa]" id="Endereco_idEmpresa" type="hidden" />

    </div>  

      

    <div class="row">

		<label for="Endereco_tipo">Tipo</label>

        <select name="Endereco[tipo]" id="Endereco_tipo">

            <option value="Comercial">Comercial</option>

            <option value="Matriz">Matriz</option>

            <option value="Filial">Filial</option>

            <option value="Representante">Representante</option>

            <option value="Posto">Posto</option>

            <option value="Distribuidor">Distribuidor</option>

            <option value="Fornecedor">Fornecedor</option>

            <option value="Anexo">Anexo</option>

            <option value="Residencial">Residencial</option>

            <option value="Pessoal">Pessoal</option>

            <option value="Outro">Outro</option>

        </select>

        <div class="erroneous" id="Endereco_tipo_em_" style="display:none"></div>

    </div>

    

	<div class="row">

		<label for="Endereco_logradouro" class="required">Logradouro <span class="required">*</span></label>

        <input size="60" maxlength="100" name="Endereco[logradouro]" id="Endereco_logradouro" type="text" />

        <div class="erroneous" id="Endereco_logradouro_em_" style="display:none"></div>

    </div>


	<div class="row">

		<label for="Endereco_numero">Numero</label>

        <input name="Endereco[numero]" id="Endereco_numero" type="text" />

        <div class="erroneous" id="Endereco_numero_em_" style="display:none"></div>

    </div>


	<div class="row">

		<label for="Endereco_complemento">Complemento</label>

        <input size="60" maxlength="100" name="Endereco[complemento]" id="Endereco_complemento" type="text" />

        <div class="erroneous" id="Endereco_complemento_em_" style="display:none"></div>

    </div>


	<div class="row">

		<label for="">Estado</label><span class="required">*</span>

		<select name="nEstado" id="nEstado">

            <option value="">estado</option>

            <option value="1">Acre</option>

            <option value="2">Alagoas</option>

            <option value="3">Amapá</option>

            <option value="4">Amazonas</option>

            <option value="5">Bahia</option>

            <option value="6">Ceará</option>

            <option value="7">Distrito Federal</option>

            <option value="8">Espírito Santo</option>

            <option value="9">Goiás</option>

            <option value="10">Maranhão</option>

            <option value="11">Mato Grosso</option>

            <option value="12">Mato Grosso do Sul</option>

            <option value="13">Minas Gerais</option>

            <option value="14">Pará</option>

            <option value="15">Paraíba</option>

            <option value="16">Paraná</option>

            <option value="17">Pernambuco</option>

            <option value="18">Piauí</option>

            <option value="19">Rio de Janeiro</option>

            <option value="20">Rio Grande do Norte</option>

            <option value="21">Rio Grande do Sul</option>

            <option value="22">Rondônia</option>

            <option value="23">Roraima</option>

            <option value="24">Santa Catarina</option>

            <option value="25">São Paulo</option>

            <option value="26">Sergipe</option>

            <option value="27">Tocantins</option>

        </select>

    </div>


	<div class="row">

		<label for="">Cidade</label><span class="required">*</span>

		<select name="nCidade" id="nCidade">

            <option value="">cidade</option>

        </select>

    </div>


    <div class="row">

        <label for="Bairro_nome" class="required">Bairro <span class="required">*</span></label>

            <span id="neighborhood">

                <input name="Bairro[nome]" id="Bairro_nome" type="text" maxlength="100" />

            </span>

		<div class="erroneous" id="Bairro_nome_em_" style="display:none"></div>

    </div>


	<div class="row">

		<input name="Endereco[idBairro]" id="Endereco_idBairro" type="hidden" />

    </div>


	<div class="row">

		<label for="Endereco_cep">CEP</label>

        <input name="Endereco[cep]" id="Endereco_cep" type="text" />

        <div class="erroneous" id="Endereco_cep_em_" style="display:none"></div>

    </div>


	<div class="row buttons">

        <input onclick="window.history.back()" class="submit" name="yt0" type="button" value="Voltar" />

        <input class="submit" type="submit" name="yt1" value="Gravar" />

    </div>

</form>

</div><!-- form -->

</div>



Vlw!

da um


print_r($_POST);die

; depois de


if(isset($_POST['Endereco']))

pra ver o que sai. Tudo parece que está certo.

essa é a array:

Array ( [Endereco] => Array ( [idEmpresa] => 14 [tipo] => Comercial [logradouro] => logra [numero] => 1234 [complemento] => comp [idBairro] => 39323 [cep] => ) [nEstado] => 1 [nCidade] => 5 [neighborhood_single] => Centro [yt1] => Gravar )

Não consigo ver problema nenhum tb

Melhor pra visualizar:




Array

(

    [Endereco] => Array

        (

            [idEmpresa] => 14

            [tipo] => Comercial

            [logradouro] => logra

            [numero] => 1234

            [complemento] => comp

            [idBairro] => 39323

            [cep] => 

        )


    [nEstado] => 1

    [nCidade] => 5

    [neighborhood_single] => Centro

    [yt1] => Gravar

)



eu hein …

Estranhamente não ta vindo os dados do bairro, mas como o gustavo já tinha dito, parece estar tudo certo.

Eu realmente não to vendo nenhum erro no seu código.

Opa

Ele não esta enviando o $_POST[‘Bairro’] porque o drop down esta substituindo a div que contem o campo


'update'=>'#neighborhood',

a url


'url'=>CController::createUrl('endereco/DynamicNeighborhoodAddress'),

deveria estar retornando um campo gerado pelo model ‘Bairro’ ou você não deveria estar usando essa var e sim a ‘neighborhood_single’

e também não tem nenhum lugar que esteja salvando o model ‘Bairro’, apenas o endereço

creio que você quiera setar o


$model->bairro=$_POST['neighborhood_single']

É isso mesmo Gustavo!

A action DynamicNeighborhoodAddress chama um CJuiAutoComplete com name="neighborhood_single".

O


$form->textField($modelBairro,'nome');

estava sendo substituido pelo widget.

Resolvido. Vlw de verdade!