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

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">&nbsp;</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
+
0
-

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?

Chbox
Člen | 125
+
0
-

musíš tam dát podmínku, viz. přiklady formulářů v distribuci.

$form	->addCondition(NForm::FILLED)
	->addRule(NForm::MIME_TYPE,...);

Editoval Chbox (3. 2. 2011 21:55)