Yii Framework Forum: Problem Z Umieszczeniem Danych Z Formularza W Modelu - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problem Z Umieszczeniem Danych Z Formularza W Modelu Rate Topic: -----

#1 User is offline   dzejks 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 20-March 13

Posted 20 March 2013 - 09:18 AM

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.
0

#2 User is offline   .viktor. 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 90
  • Joined: 25-August 10
  • Location:Sokołów Podlaski, Poland

Posted 20 March 2013 - 09:33 AM

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

#3 User is offline   dzejks 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 20-March 13

Posted 20 March 2013 - 09:42 AM

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...
0

#4 User is offline   luk1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 20-April 11
  • Location:Poland

Posted 20 March 2013 - 02:08 PM

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')); ?>

0

#5 User is offline   Laret 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 21-August 12
  • Location:Poland

Posted 21 March 2013 - 06:56 AM

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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users