campos obrigatórios e não cria

acção create:


public function actionCreate() {

        $ritmo = new Ritmo;

        $mp3 = new Document;


        if (isset($_POST['Ritmo'])) {

            $ritmo->attributes = $_POST['Ritmo'];

     

        $ritmo->save();  

    

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

        

        }

       

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

            'ritmo' => $ritmo,

            'mp3' => $mp3

        ));

    }

_form view:


<div class="form">


<?php


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

    'id'=>'ritmo-form',

    'enableAjaxValidation'=>false,

    'method'=>'post',

    'htmlOptions'=>array(

        'enctype'=>'multipart/form-data'

    )

     )); ?>  

    


        <p class="note">Fields with <span class="required">*</span> are required.</p>


        <?php echo $form->errorSummary($ritmo); ?>

        

        


        <div class="row">

                <?php echo $form->labelEx($ritmo,'artist'); ?>

                <?php echo $form->textField($ritmo,'artist',array('size'=>45,'maxlength'=>45)); ?>

                <?php echo $form->error($ritmo,'artist'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($ritmo,'title'); ?>

                <?php echo $form->textField($ritmo,'title',array('size'=>45,'maxlength'=>45)); ?>

                <?php echo $form->error($ritmo,'title'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($ritmo,'price'); ?>

                <?php echo $form->textField($ritmo,'price',array('size'=>10,'maxlength'=>10)); ?>

                <?php echo $form->error($ritmo,'price'); ?>

        </div>


        <div class="row">

                <?php echo $form->labelEx($ritmo,'mp3'); ?>

                <?php echo $form->fileField($mp3,'content',array('size'=>60)); ?>

                <?php echo $form->error($ritmo,'mp3'); ?>

        </div>

     <div class="row">

                <?php echo $form->labelEx($ritmo,'youtubeLnk'); ?>

                <?php echo $form->textField($ritmo,'youtubeLnk',array('size'=>60));  ?>

                <?php echo $form->error($ritmo,'youtubeLnk'); ?>

        </div>

        

        <div class="row">

                <?php echo $form->labelEx($ritmo,'categoria'); ?>

               <table style="width:100px"><tr>

                       <td style="padding:0"><?php echo $form->dropdownlist($ritmo,'categoria',$ritmo->Categorias) ?></td>

                       <td style="padding:0"><?php echo CHtml::link(CHtml::image(Yii::app()->request->baseUrl . '/images/add.png','cart'), Yii::app()->createUrl('admin/categoria/create')); ?></td>

                      </tr>

               </table>

                

                <?php echo $form->error($ritmo,'categoria'); ?>

                

        </div>


        <div class="row buttons">

                <?php echo CHtml::submitButton($ritmo->isNewRecord ? 'Create' : 'Save'); ?>

        </div>


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


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

create view:


<?php

$this->breadcrumbs=array(

        'Ritmos'=>array('index'),

        'Create',

);


$this->menu=array(

        array('label'=>Yii::t('app','List').' '. Yii::t('app','Style'), 'url'=>array('index')),

        array('label'=>Yii::t('app','Manage').' '. Yii::t('app','Style'), 'url'=>array('admin')),

);

?>


<h1>Create Ritmo</h1>


<?php echo $this->renderPartial('_form', array(

                            'ritmo'=>$ritmo,

                             'mp3'=>$mp3

                                            )); ?>






Não valida os campos obrigatórios e não cria o registo aparecende uma página que diz ERROR 400 invalid request

zipzap,

Faça o mais simples:




public function actionCreate() {

        ...

     

        if($ritmo->validate()){

           $ritmo->save();  

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

        }    

        ...

    }



Não.Acontece o mesmo

ERROR 400.

Your request is invalid.

Muda a url:

De:


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

Para:


$this->redirect(Yii::app()->createUrl('ritmo/view', array('id'=>$ritmo->idritmo)));

Se ocorrer o erro novamente, remove o $this->redirect() e faça o teste novamente.

sim funcionou com $this->redirect(Yii::app()->createUrl(‘admin/ritmo/view’, array(‘id’=>$ritmo->idritmo)));

agora gostava de saber o porquê já que tenho outros controladores com o outro código e tambem funciona

Bom eu nunca usei o Yii::app()->controller->redirect() como renderizador, e sim como redirecionador.

$this->redirect() é o mesmo que o header(‘Location:’).

Eu faço um pouco de confusão com o redirect e o render.Não sei muito bem qual a diferença

No código gerado pelo gii numa action create quando é feito um post usa o redirect