form Submit


<?php 

	$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(

		'enableAjaxValidation'=>false,

	)); 

echo $form->errorSummary($model); 

?>


<?php echo $form->textAreaControlGroup($model,'email_personal',array('span'=>5)); ?>


<?php echo $form->textAreaControlGroup($model,'email_managers',array('span'=>5)); ?>


<?php echo $form->textAreaControlGroup($model,'email_footer',array('span'=>5)); ?>


<?php echo $form->dropDownListControlGroup($model,'urlopy_back',

        array(0=>'1 dzień',1=> '2 dni',2=> '3 dni',3=> '4 dni',4=> '5 dni',5=>'6dni',6=> 'tydzień',7=> 'brak ograniczeń')); ?>

		

<?php echo $form->dropDownListControlGroup($model,'group_vision',

        array(0=>'Wg. hierarchi grup',1=> 'Wg. zaszeregowania')); ?>

		

<?php echo  TbHtml::submitButton('Zapisz',array(

			'name' => 'Zapisz',

		    'color'=>TbHtml::BUTTON_COLOR_PRIMARY,

		    'size'=>TbHtml::BUTTON_SIZE_LARGE,

		)); 

?>


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

Mam widok jak na załączonym obrazku. Świetnie ładuje dane z modelu, ale przy próbie aktualizacji danych- nie robi tego- tylko wczytuje stare… Gdzie jest błąd? Czyżbym coś pominął?

Tym się wzorowałem.

Za słabo opisałeś problem… (nie robi tego- tylko wczytuje stare…)

Bardzo możliwe że problem jest w kontrolerze, nie w widoku.

Wybacz już wyjaśniam. Ładuję widok, dane ładnie załadowują się do widoku, po wyedytowaniu i potwierdzeniu submitButton’em, widok przeładowuje się ładując dane z przed edycji- w bazie oczywiście też się nic nie dzieje.

Tutaj Controller:


	public function actionIndex()

	{

		$this->layout = 'column1';

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

			'model' => $this->loadModel(),

		));

	}


	public function loadModel($id = 1)

	{

		$model=Customize::model()->findByPk($id);

		if ($model===null) {

			throw new CHttpException(404,'The requested page does not exist.');

		}

		return $model;

	}

Tutaj wykaz nagłówków:




YII_CSRF_TOKEN:76504f014d14ad237ffc127a0b84a8cecf816a7a

Customize[email_personal]: brak

Customize[email_managers]: brak

Customize[email_footer]: brak

Customize[urlopy_back]:3

Customize[group_vision]:0

Zapisz:

"brak" to nowe dane które wpisałem.

Formularz nie odpowiada za zapisywanie danych, robi to kontroler, a u ciebie po prostu nie ma obsługi przesyłanych przez formularz danych, więc nic się z nimi nie dzieje - kontroler ponownie wczytuje model z bazy i twoje zmiany przepadają. Wygeneruj sobie panel CRUD za pomocą Gii i zobacz jak tam to jest zrobione.

W Controllerze:


        public function actionIndex()

	{

		$model = $this->loadModel();

		if (isset($_POST['customize-form'])) {

			$model->attributes=$_POST['customize-form'];

		}

		$model->save();

		

		$this->layout = 'column1';

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

			'model' => $model,

		));

	}

na widoku:


$form=$this->beginWidget('bootstrap.widgets.TbActiveForm', array(

		'id' => 'customize-form',

		'enableAjaxValidation'=>false,

	)); 

W zasadzie to powinno załatwić sprawę, prawda? A nie załatwia ;)

Nie powinno, powinieneś korzystać z &#036;_POST['Customize'] - kluczem jest nazwa modelu, a nie id formularza. Poza tym duże znacznie mają też reguły walidacji w modelu.

Zmieniłem ‘$_POST’ efekt nadam mam ten sam.

To wiem dlatego narazie je usunąłem, żeby doprowadzić do stanu "działania".

Edit:

Doszedłem do tego, że dane ładnie sa przekazywane do modelu w actionIndex, ale on sie nie zapisuje- pomimo braku reguł walidacji w modelu.

Usunięcie reguł prawdopodobnie jest przyczyną tego że nie działa. Serio, poczytaj dokumentację, bo nie mając pojęcia jak działają te mechanizmy i błądząc po omacku niczego nie osiągniesz.

Yii 2 wymaga conajmniej jednej walidacji na każdy atrybut modelu lub określenie tego atrybutu jako ‘safe’.

Ustaw walidacje i zacznie działać

Podstawowy błąd. Nie sprawdzasz czy udało Ci się zapisać dane. Metoda save zwraca wartość logiczną. Przy false możesz wykorzystać


$model->getErrors()

i wiesz co jest nie tak.