Nepovinný prvek addUpload ve formuláři

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 552
+
0
-

Zdravim.
Snazim se udelat nepovinny addUpload:

/**
 * Formular pro novinky
 */
protected function newForm()
{
    $form = new Form();
    $form->addText( 'title', 'Titulek:', 108 )
            ->addRule( Form::FILLED, 'Je nutné zadat titulek novinky' );
    $form->addTextArea( 'text', 'Text:', 83 )
            ->addRule( Form::FILLED, "Je nutné zadat text novinky" )
            ->controlPrototype->addClass( 'ckedit' );
    $form->addUpload('picture', 'Obrázek:')
            ->addRule( Form::IMAGE, 'Obrázek musí být JPEG, PNG nebo GIF.' );

    return $form;
}

/**
 * Formulář pro editaci novinky
 */
protected function createComponentEditNewForm()
{
    $form = $this->newForm();
    $form->addDate( 'date', 'Datum:', DateInput::TYPE_DATETIME )
            ->addRule( Form::FILLED, "Je nutné zadat datum novinky" );

    $form->addSubmit( 'create', 'Editovat novinku' );
    $form->onSuccess[ ] = $this->editNewFormSubmitted;

    $form->setDefaults( array(
        'title' => $this->oNew->title,
        'text' => $this->oNew->text,
        'date' => $this->oNew->date,
    ) );


    if ( $this->oNew->picture ) {
        $form['picture']->setOption('description', Html::el('img')->src( "/pictures/news/small_" . $this->oNew->picture )->class('picturePreview'));
    }

    return $form;
}

/**
 * Odeslani formulare pro editaci novinky
 */
public function editNewFormSubmitted( Form $form )
{
    $aValues = $form->getValues( TRUE ); // same as: (array) $form->values;

    //pokud nahravam fotku
    if ( $aValues[ "picture" ]->isOk() ) {
        //funkce pro zmenseni a ulozeni fotky, vrati nazev fotky
        $aValues["picture"] = $this->createNewsPhoto( $aValues["picture"] );
    }
    else
    {
        //nenahravam fotku
        unset( $aValues[ "picture" ] );
    }

    $this->context->novinky->update( $this->oNew->id, $aValues );

    $this->flashMessage( 'Novinka byla upravena', 'info' );
    $this->redirect( 'Homepage:default' );
}

Ovšem tento kod mi skončí na chybě: Obrázek musí být JPEG, PNG nebo GIF.

Jak na to? Chci aby addUpload nebyl povinný, ale pokud se vybere obrázek, tak musí splňovat požadovaná pravidla.
Používám Nette 2.0.6

Díky

MW
Člen | 626
+
0
-

Co nejak takto:

->addCondition(Form::FILLED)
    ->addRule(Form::IMAGE, 'Obrázek musí být JPEG, PNG nebo GIF.');
Majkl578
Moderator | 1364
+
0
-

Budeš tam muset dát podmínění vyplnění:

$form->addUpload('picture', 'Obrázek:')
	->addCondition(Form::FILLED)
            ->addRule(Form::IMAGE, 'Obrázek musí být JPEG, PNG nebo GIF.');