Erro CJuiDatePicker

Pessoal

Estou tentando usar um CJuiDatePicker num form e não está sendo atribuído o valor informado no widget para o model.

O código que estou usando é o seguinte:




            $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                'name'=>'data_transacao',

                'model'=>$model,

                'attribute'=>'data_transacao',

                // additional javascript options for the date picker plugin

                'options'=>array(

//                    'showAnim'=>'fold',

                    'dateFormat'=>'dd/mm/yy',

                    'changeMonth' => 'true',

                    'changeYear' => 'true',

                    'showButtonPanel' => 'true',

                    'constrainInput' => 'true'

                ),

                'htmlOptions'=>array(

                    'style'=>'height:16px;'

                ),

            ));



Quando uso esse widget tenho que tirar o atributo de "required" no model?

Obrigado.

Pra esclarecimento:

Estou usando a versão 1.1.2.r2086.

Cara, não sei se é a mesma coisa, mas ultimamente eu estou tendo que setar alguns valores que vem de POST na mão … Não descobri o pq, mas eu tenho em alguns lugares o horrível código abaixo.




    $this->_pedido->attributes = $_POST['Pedido'];

    $this->_pedido->observacao = $_POST['Pedido']['observacao'];



Pode parecer um absurdo, mas algumas coisas a propriedade attributes não ta setando certo. To usando yii-1.1.0.r1700, mas notei isso em versões mais antigas.

Veja se não é o mesmo caso que o meu, e pode ser que seja algum bug do FW.

Pra mim seu workaround dá erro de índice não definido.

Como se nem o campo do model definido no CJuiDatePicker seja atribuido ao model vinculado.

O workaround que funcionou foi esse (também gambiarra do tipo force value):




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

                $model->data_transacao = $_POST['data_transacao'];



O valor do input do controle do form recebe valor, mas o atributo não.

Estranho…

Cara, então pelo que vc ta falando ai, vc não ta gerando o input de data com CHtml::activeTextField. Pq o nome do componente (E consequente o nome da variável que vc recebe) não está da forma que o YII costuma gerar.

Veja se usando a função CHtml::activeTextField, e se por acaso não está alterando o nome. Se não der certo, posta sua view pra a gente dar uma olhada.

Fala Daniel.

Estou gerando o input do form da seguinte maneira:




<div class="row">

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

		<?php

            $this->widget('zii.widgets.jui.CJuiDatePicker', array(

                'name'=>'data_transacao',

                'model'=>$model,

                'attribute'=>'data_transacao',

                // additional javascript options for the date picker plugin

                'options'=>array(

//                    'showAnim'=>'fold',

                    'dateFormat'=>'dd/mm/yy',

                    'changeMonth' => 'true',

                    'changeYear' => 'true',

                    'showButtonPanel' => 'true',

                    'constrainInput' => 'true'

                ),

                'htmlOptions'=>array(

                    'style'=>'height:16px;'

                ),

            ));

        ?>

		<?php echo $form->error($model,'data_transacao'); ?>

	</div>



Preciso usar a função CHtml::activeTextField antes do $this->widget ???

Valeu a força!

Seguinte. Os CHtml::active… da vida, geram as tags de formulários com os nomes padronizados no formato Classe[Field]. O CJuiDatePicker não faz isso, então, vc tem que setar na mão.

Existe uma função pra resolver este problema. CHtml::resolveName($model, $attribute). Use ela pra gerar o nome do CJuiDatePicker, e vc não vai mais precisar da linha abaixo pra poder pegar o valor da data.


 if(isset($_POST['data_transacao'])) $model->data_transacao = $_POST['data_transacao'];

Opa! Funcionou… mas não sem esforço. B)

A função CHtml::resolveName(CModel $model, string $attribute) exige que o segundo parâmetro seja uma variável, não sei por quê cargas d’água que dava erro ao executá-la assim:




    $input_data_name = CHtml::resolveName($model, 'data_transacao');



Só funcionou executando assim:




            $input_data_name = 'data_transacao';

            $input_data_name = CHtml::resolveName($model, $input_data_name);



O name gerado é no formato dos CHtml::active… -> Model[attribute]

Já não é mais necessária aquela atribuição forçada no Controller.

Obrigado pela ajuda.

seguinte, daniel bastos, vc comentou que tem q receber alguns attributes na "mão", eu tbm fazia isso, acho q descobri o problema. isso geralmente acontecia(pra mim) quando usava scenarios, eu recebia o post e setava o scenario, corrigi esse problema apenas setando o scenario antes de receber os dados via post.

t+

abraço galera yii4ever

Pois é … mas só tem 1 lugar no sistema inteiro que uso scenarios. Em lugares que não uso, acontece o mesmo.

Pardon me for not providing this in Portuguese.

I think I encountered the same problem as posted here so I translated it to English.

I discovered a solution to my problem. I hope this may help with yours.

If you are having a problem validating required data in CJuiDatePicker, try this:




$form->widget('zii.widgets.jui.CJuiDatePicker', array(

    //'name'=>'data_transacao',

    'name'=>'ModelName[data_transacao]', 



Substitute ModelName with the actual name of the applicable model.

I’m not yet sure if changing $this to $form is necessary.

I tried this after I viewed the html source for ‘data_transacao’ as a textField and validation passed.