Input mező validálása

Létrehoztam egy controllert egy db create action-nel. Legyen most pl a controller neve Media

Van egy másik táblám, amiből kiszedem az adatokat. Ezt meg is adom neki a create elején. $model = new Kategoria;

A views mezőben szép minden meg okés, de ha üres mezőt akarok elküldeni akkor nem jelez hibát. Visszaugrik az eredeti oldalra, ami jó. Csak épp a hibát nem jelzi ki. :)

Ez van a view-sban.


	<div class="row">

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

                <?php echo $form->dropDownList($model,'kategoria', $valasz, $prompt); ?>

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

	</div>

Ez pedig a controller része.




class MediaController ext... {

public function actionCreate()

	{

                $model=new Kategoriak;

                //$model->validate(array('kategoria'=>'integer'));

                if(isset($_POST['Kategoriak']) && !empty($_POST['Kategoriak']['kategoria'])) {

                    $_SESSION['kategoria'] = $_POST['Kategoriak']['kategoria'];

                    $this->redirect(array(Yii::app()->baseUrl.'/user/registration'));

                }

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

			'model'=>$model,

		));

	}

Én nem látok semmi olyan kódot, ami arra utalna, hogy bármilyen hibaüzenetet is meg kellene jelenítenie…

Talán ha nem kommentként szerepelne a $model validálása, több sikerrel járnál.

A views-ba van egy ilyen sor.


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

Akár kikommentezem, akár nem. Semmit nem jelenít meg. Pedig ki kellene írni, hogy nem lehet üres. A promt marad a drowpdown aktív elem.

Átírtam az if sort, de most sem ír ki semmit sem:


if(isset($_POST['Kategoriak']) && !empty($_POST['Kategoriak']['kategoria']) && $model->validate(array(array('kategoria','numerical', 'integerOnly'=>true), array('kategoria', 'required')))) {

Ellenben ha, csak $model->validate(), akkor kiírja, de nekem akkor kiír olyat is ami nem kell.

Átírtam erre:


if(isset($_POST['Kategoriak']) && $model->validate(array('kategoria', 'required'))) {

Most már majdnem jó, csak épp bármit adok meg neki, mindig azt írja ki, hogy üres a mező. Még ha valójában nem üres. :)

Nyomtam a post-ra egy var_dump-ot és mutatta, hogy van benne adat.

Két probléma van:

  • A validate() metódus nem így működik. Nem tudod paraméterként átadni neki a validálási szabályokat, csak a validálandó tulajdonságok neveit. A szabályokat a model rules() metódusában kell meghatározni.

  • Nem látom a kódodban, hogy hol adod át a $_POST-ban kapott értékeket a model példánynak. A $model->validate() elé be kellene szúrni egy ilyen sort:




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



Ismét megmentettél. Most így okés. :)


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

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

                    if($model->validate(array('kategoria'))) {

                        $_SESSION['kategoria'] = $_POST['Kategoriak']['kategoria'];

                        $this->redirect(array(Yii::app()->baseUrl.'/user/registration'));

                    }

                }

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

			'model'=>$model,

		));