Построитель форм и AR

Форма добавления


$model = new AddFrom;

$form = new CForm('application.views.docs.addForm', $model);

Форма редактирование…вроде должно работать, а не работает.


$model = AddFrom::model()->findbyPk($_GET['id']);

$form = new CForm('application.views.docs.addForm', $model);

Что я упустил?

Что конкретно не работает, какая ошибка? Если первый аргумент путь, то файл addForm.php должен возвращать массив настроек для формы.

[font="Courier New"]Форма не появляется…точней появляется только submit

Добавление происходит нормально…а вот как сделать редактирование с построителем…

Ну т.е. добавление и редактирование одна и таже форма, только у редактирование выставлены значения из базы…


public function actionAdd()

{

	$model = new addFrom;

	$form = new CForm('docs.forms.addForm', $model);

	//...


public function actionEdit()

{

	$model = addFrom::model()->findByPk($_GET['id']);

	$form = new CForm('docs.forms.addForm', $model);

	//...

[/font]

Ну вообще-то у меня такое было, когда атрибуты модели не были объявлены как "safe", но тогда странно что первый вариант работает (если они у вас конечно "safe" для любого сценария).

findByPk нормальный результат возвращает?

Да. Объявил safe для всех полей, тоже самое


array('function, description, syntax, inc, module, type, params, example', 'safe'),

Все стандартно…

Все правила


public function rules()

{

	return array(

		array('function, description, syntax, inc, module, type, params', 'required'),

		array('function, description, syntax, inc, module, type, params, example', 'safe'),

		array('type', 'in', 'range' => array('Native', 'Public', 'Forward', 'Stock ')),

	);

}

Странно, подобный код у меня работает и при создании, и при редактировании… либо я чего-то не вижу, либо ошибка вркалась с другой стороны. Попробуйте создать всё с нуля или поэкспериментировать с другой моделью…

Создал другую базу, тоже самое…добавляется нормально, редактироваться не хочет.


<?php

class TestModel extends CActiveRecord

{

	public $text;


	public static function model($className=__CLASS__)

	{

		return parent::model($className);

	}


	public function tableName()

	{

		return 'test';

	}


	public function rules()

	{

		return array(

			array('text', 'required'),

			array('text', 'safe'),

		);

	}

}


class TestController extends Controller

{

	public function actionIndex()

	{

		$model = new TestModel;

		$form = new CForm('webroot.form', $model);

		

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

		{

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

			

			if($model->save())

				$this->redirect(Yii::app()->createAbsoluteUrl('test/index'));

		}

		else

			echo $form;

	}

	

	public function actionEdit()

	{

		$model = TestModel::model()->findByPk($_GET['id']);

		$form = new CForm($form, $model);

		

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

		{

			if($model->save())

				$this->redirect(Yii::app()->createAbsoluteUrl('test/index'));

		}

		else

			echo $form;

	}

}


<?php

return array(

	'elements'=>array(

		'text'=>array(

			'type'=>'textarea',

			'cols'=>60,

			'rows' => 4,

		),

	),

	'buttons' => array(

		'add' => array(

			'type' => 'submit',

			'value' => 'Сохранить',

        ),

    ),

);

print_r($model);


TestModel Object

(

    [text] => My Record

    ....

Вот такой код у меня работает без проблем:




$model = TestModel::model()->findByPk($_GET['id']);

$form = new CForm('webroot.form', $model);


if($form->submitted('add') && $form->validate())

{

    if ($model->save(false))

        $this->refresh();

}