Problem Z Umieszczeniem Danych Z Formularza W Modelu

Witam,

Mam pewien problem. Przesyłam z formularza pewne dane. Akcja dodająca te elementy do bazy wygląda tak:


	public function actionUpdate($id)

	{

		$model=$this->loadModel($id);


		$this->performAjaxValidation($model);


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

		{

                        $old_image = $model->image;

                        $old_image2 = $model->image2;

                        $old_image3 = $model->image3;

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

			if($model->save())

                        {

                          ...

                        }

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

                }

		}

	}

Z formularza przesyłam dwa pola o nazwach ‘image2’ i ‘image3’ + jedno testowe ‘test’. Debugując aplikację, zdołałem zauważyć że:

  1. formularz POST jest przesylany poprawnie, wraz ze wszystkimi wartościami

  2. $model->attributes=$_POST[‘Product’]; to przypisanie nie działa. Żadne z tych trzech dodatkowych pól nie zostaje poprawnie przypisane.

  3. w model->_attributes pojawia się pole ‘test’, jednak jak już wspomniałem przypisanie nie działa prawidłowo.

  4. pola i’image2’ i ‘image3’ w modelu w ogóle nie istnieją.

Reguły modelu wyglądają następująco:


	public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('name', 'required'),

			array('promotion', 'numerical', 'integerOnly'=>true),

                        array('archived', 'numerical', 'integerOnly'=>true),

			array('category_id', 'length', 'max'=>10),

			array('sort_order', 'length', 'max'=>11),

			array('name', 'length', 'max'=>128),

			array('image', 'length', 'max'=>64),

                        array('image2', 'length', 'max'=>64),

                        array('image3', 'length', 'max'=>64),

                        array('test', 'length', 'max'=>64),

			array('description_short_pl, description_short_en, description_long_pl, description_long_en', 'safe'),

			// The following rule is used by search().

			// Please remove those attributes that should not be searched.

			array('id, category_id, name, image, image2, image3, promotion, archived, description_short_pl, description_short_en, description_long_pl, description_long_en', 'safe', 'on'=>'search'),

		);

	}

Oczywiście pola w tabeli istnieją i mają się dobrze. Bardzo proszę o pomoc, konkretnie: dlaczego pola image2 i image3 nie istnieją w atrybutach modelu i dlaczego pole ‘test’ nie zostaje poprawnie przypisane. Pozostałe elementy formularza działają bezbłędnie.

Podeślij jeszcze var_dump($_POST), żeby przypisanie działało poprawnie musi być tablica w formacie (nazwa pola=> wartość).

files.tinypic.pl/i/00350/hvz0y9fupqph.jpg

U góry jest adres, niestety nie mogłem umieścić tego jako obrazek czy link gdyż forum uznawało to za spam. Tablica jest napewno ok, chociażby dlatego że przypisanie ręczne działa.


$model->test=$_POST['Product']['test'];

Dlaczego &model->save() tego nie łapie, dlaczego nie mam pól ‘image2’ i ‘image3’ w modelu pomimo tego że istnieją w bazie i znajdują się w rules? Problem mógłbym rozwiązać takimi ręcznymi przypisaniami ale nie ratuje mnie to ponieważ właśnie nie mam tych pól w modelu…

Mógłbyś jeszcze dać widok formularza.

Jeśli pola image2 i image3 są podpięte pod FileField, to musisz dodać odpowiedni parametr w deklaracji formularza:


<?php echo CHtml::form('', 'post', array('enctype'=>'multipart/form-data')); ?>

Jeśli to fileField

Model:




<?php

class Post extends CActiveRecord

{

 

    public $image1; //To dodajesz




Natomiast w akcjii Update:




public function actionUpdate()

	{

		$model=$this->loadModel();

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

		{

			$old_image = $model->image;

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

			$image = CUploadedFile::getInstance($model,'image1'); //Tak pobierasz nazwę pliku



CUploadedFile::getInstance pobiera nazwę pliku.

Tutaj bardziej szczegółowo opisane:

yii upload form