Nespracuje se formulář po odeslání
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Tomáš Jablonický
- Člen | 115
Zdravím,
mám problém – po odeslání formuláře se mi formulář nepřesměruje na callback ale adresa zůstane na ?do=formEditUser-submit. Tedy nevyvolá se metoda pro spracování formuláře.
Formulář mám definovaný takto:
public function formUser($name, $submit){
$form = new NAppForm($this, $name);
$form->addText('name', 'Jméno')
->addRule(NForm::FILLED, 'Jméno musí být vyplněno.');
$form->addText('surname', 'Příjmení')
->addRule(NForm::FILLED, 'Příjmení musí být vyplněno.');
$form->addText('email', 'E-mail')
->addRule(NForm::FILLED, 'E-mail musí být vyplněn.')
->addRule(NForm::EMAIL, 'Byl zadán neplatný e-mail.');
$form->addText('tel', 'Telefon')
->addRule(NForm::FILLED, 'Telefon musí být vyplněny')
->addRule(NForm::NUMERIC, 'Telefon je zadán nesprávně. Zadejte jen čísla bez mezer.');
$form->addSelect('id_town', 'Bydliště', TownModel::getInstance()->getTownAssoc());
$form->addText('street', 'Ulice')
->addRule(NForm::FILLED, 'Ulice musí být vyplněná.');
$block = Array(
FALSE => 'Aktivní',
TRUE => 'Blokovat'
);
$form->addSelect('block', 'Blokace', $block)
->setDefaultValue(0);
$form->addHidden('HRole')->setDefaultValue(0);
$form->addPassword('password', 'Heslo')
->addRule(NForm::FILLED, 'Heslo nebylo vyplněno.');
$form->addPassword('password2', 'Heslo znovu')
->addRule(NForm::FILLED, 'Heslo 2 nebylo vyplněno.')
->addRule(NForm::EQUAL, 'Zadaná hesla nesouhlasí.', $form['password']);
$form->addMultiSelect('id_group', 'Školí skupiny', GroupModel::getInstance()->getGroupAssoc())
->getControlPrototype()
->class('selector');
$form->addMultiSelect('id_trained', 'Školí bloky', TrainedModel::getInstance()->getTrainedAssoc())
->getControlPrototype()
->class('selector');
$form->addText('pusobeni', 'Místo působení')
->addRule(NForm::FILLED, 'Místo působení musí být vyplněno.');
$form->addText('post_code', 'PSČ')
->addRule(NForm::INTEGER, 'PSČ musí být čísla bez mezer.');
$form->addSelect('role', 'Role', BaseModel::getInstance()->getRole())
->getControlPrototype()
->class('selector');
$form->addFile('avatar', 'Avatar')
->addRule(NForm::MIME_TYPE, 'Avatar musí být obrázek.', array('image/png', 'image/jpeg','image/jpg', 'image/gif'));
$form->addText('organization', 'Organizace')
->addRule(NForm::FILLED, 'Organizace musí být vyplněna.');
$year_un = Array(
2008 => 2008,
2009 => 2009,
2010 => 2010,
2011 => 2011
);
$form->addSelect('year_un', 'Rok vyškolení', $year_un);
$form->addSubmit('user_submit', 'Uložit');
$form->addHidden('send')->setValue(TRUE);
$form->onSubmit[] = callback($this, $submit);
return $form;
}
public function renderEditUser($id){
$this->session->id_user = $id;
$where = Array();
$where[] = '[u].id_user='.$id;
$user = UserModel::getInstance()->getUser($where);
$this->template->user = $user[0];
$this->template->formUser = $this->getComponent('formEditUser');
}
protected function createComponentFormEditUser(){
return $this->formUser('formEditUser', 'submitEditUser');
}
public function submitEditUser(NAppForm $form){
if($form->isValid()){
$values = $form->getValues();
UserModel::getInstance()->updateUser($values, $this->session->id_user);
$this->flashMessage('Užívatel byl uložen.', 'message');
}
$this->redirect('Admin:EditUser', $this->session->id_user);
}
Do šablony to vypisuji takto:
{block content}
<h2>Administrac - editace uživatele</h2>
{include admin_menu.phtml}
{include ../Component/message.phtml}
<div class="clear"> </div>
{$formUser->render('begin')}
<table class="table-form">
<tr>
<td><label>Jméno*:</label></td>
<td>{$formUser['name']->setValue($user->name)->control}</td>
</tr>
<tr>
<td><label>Příjmení*:</label></td>
<td>{$formUser['surname']->setValue($user->surname)->control}</td>
</tr>
<tr>
<td><label>Avatar:</label></td>
<td>{$formUser['avatar']->control}</td>
</tr>
<tr>
<td></td>
<td><i>Jedná se o miniatůru vzhledu uživatele.</i></td>
</tr>
<tr>
<td><label>Město působení*:</label></td>
<td>{$formUser['id_town']->setDefaultValue($user->id_town)->control}</td>
</tr>
<tr>
<td><label>Ulice nebo část města*:</label></td>
<td>{$formUser['street']->setValue($user->name)->control}</td>
</tr>
<tr>
<td><label>Místo působení*:</label></td>
<td>{$formUser['pusobeni']->setValue($user->pusobeni)->control}</td>
</tr>
<tr>
<td><label>PSČ:</label></td>
<td>{$formUser['post_code']->setValue($user->post_code)->control}</td>
</tr>
<tr>
<td><label>E-mail*:</label></td>
<td>{$formUser['email']->setValue($user->email)->control}</td>
</tr>
<tr>
<td><label>Telefon*:</label></td>
<td>{$formUser['tel']->setValue($user->tel)->control}</td>
</tr>
<tr>
<td><label>Heslo*:</label></td>
<td>{$formUser['password']->control}</td>
</tr>
<tr>
<td><label>Heslo znovu*:</label></td>
<td>{$formUser['password2']->control}</td>
</tr>
{if $role == 2}
<tr>
<td><label>Uživatelská role*:</label></td>
<td>{$formUser['role']->setDefaultValue($user->role)->control}</td>
</tr>
{/if}
<tr>
<td><label>Školí skupinu*:</label></td>
<td>{$formUser['id_group']->setDefaultValue($user->group_id_group)->control}</td>
</tr>
<tr>
<td></td>
<td><i>Pro výběr více skupin držte ctr a vybírejte.</i></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><label>Školí blok*:</label></td>
<td>{$formUser['id_trained']->setDefaultValue($user->trained_id_trained)->control}</td>
</tr>
<tr>
<td></td>
<td><i>Pro výběr více školících bloku držte ctrl a vyberte.</i></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td><label>Organizace*:</label></td>
<td>{$formUser['organization']->setValue($user->organization)->control}</td>
</tr>
<tr>
<td><label>Rok vyškolení*:</label></td>
<td>{$formUser['year_un']->setValue($user->year_un)->control}</td>
</tr>
<tr>
<td><label>Blokování užívatele:</label></td>
<td>{$formUser['block']->setDefaultValue($user->block)->control}</td>
</tr>
<tr>
<td></td>
<td>{$formUser['user_submit']->control}</td>
</tr>
</table>
{if $role == 1}
{$formUser['HRole']->control}
{/if}
{$formUser->render('end')}
{/block}
- Tomáš Jablonický
- Člen | 115
Pří vyplňování nechám prázdný input file ‚avatar‘ a nedojde z toho důvodu ke zpracování. Jak to ošetřit aby toto pole mohlo být prázdné a zároveň se mohl form zpracovat?