Nenalezena cesta v use form

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

Dobrý den.
Mám napsaný script v HomepagePresenter pro formulář který vypadá následovně:

use Nette\Application\UI\Form‏;

class HomepagePresenter extends BasePresenter {

    protected function createComponentContactForm()
    {
        $form = new Form();
        $form->addText('name', 'Jméno:')
            ->addRule(Form::FILLED, 'Zadejte jméno');
        $form->addText('last', 'Příjmení:')
            ->addRule(Form::FILLED, 'Zadejte příjmení');
        $form->addText('adress', 'Adresa:')
            ->addRule(Form::FILLED, 'Zadejte příjmení');
        $form->addText('mail', 'Email:')
            ->addRule(Form::FILLED, 'Zadejte email')
            ->addRule(Form::EMAIL, 'Email nemá správný formát');
        $form->addTextarea('message', 'Zpráva:')
            ->addRule(Form::FILLED, 'Zadejte zprávu');
        $form->addSubmit('send', 'Odeslat');

        $form->onSuccess[] = $this->processContactForm;

        return $form;
    }

    public function processContactForm(Form $form)
    {
        $values = $form->getValues(TRUE);

        $message = new Message;
        $message->addTo('info@test.com')
            ->setFrom($values['mail'])
            ->setSubject('Zpráva z kontaktního formuláře')
            ->setBody($values['message'])
            ->send();

        $this->flashMessage('Zpráva byla odeslána');
        $this->redirect('this');
    }
}

V default.latte vypisuji formulář následovně:

{form contactForm}

   {input name}

      {input last}

   {input adress}

      {input mail}

   {input message}

      {input send}

{/form}

Kompletní HomepagePresenter má trochu delší script, ale pro ukázku posílám jen tento protože v tomhle je nejspíš chyba, jelikož mi laděnka hlásí chybu:

Fatal Error
Class 'App\FrontModule\Presenters\Form' not found

S červeným řádkem

$form = new Form();

Kde může být chyba? Trápím se s tím od rána

Jan Endel
Člen | 1016
+
0
-

Opravdu tam máš to co tady píšeš? Ten kód co je tady je validní, důležité je to použití use. Zkontroluj jestli v okolí nemáš nějaké netisknutelné bílé znaky co by to mohlo dezinterpretovat.

iguana007
Člen | 970
+
0
-

Zkus si na začátek toho use přidat ještě jedno lomítko:

use \Nette\Application\UI\Form‏;
Šaman
Člen | 2666
+
+2
-

Podívej se, jestli nemáš nějaký formulář třeba v BasePresenteru (bez toho use).

Pro odladění zatím můžeš použít celý NS při vytváření formu:

<?php
$form = new \Nette\Application\UI\Form();
# ...
public function processContactForm(\Nette\Application\UI\Form $form)
?>

Pak ale zakomentuj všechny addRule (taky obsahují Form).

Lomítko na začátku v sekci use být nemusí, v kódu pak ano.

Editoval Šaman (25. 8. 2014 15:32)

Sveet
Člen | 55
+
0
-

Tohle jsem také zkoušel, a nepomohlo

Sveet
Člen | 55
+
0
-

Ani tohle nefunguje, jinak v BasePresenter formulář nemám

Editoval Sveet (25. 8. 2014 16:56)

Sveet
Člen | 55
+
0
-

Ano opravdu tam mám to co tady píšu, kromě emailu: info@test.com, tedy kompletně mám toto:

namespace App\FrontModule\Presenters;

use Nette,
    App\Model;

use Nette\Application\UI\Form‏;

class HomepagePresenter extends BasePresenter {

    protected function createComponentContactForm()
    {
        $form = new Form();
        $form->addText('name', 'Jméno:')
            ->addRule(Form::FILLED, 'Zadejte jméno');
        $form->addText('last', 'Příjmení:')
            ->addRule(Form::FILLED, 'Zadejte příjmení');
        $form->addText('adress', 'Adresa:')
            ->addRule(Form::FILLED, 'Zadejte příjmení');
        $form->addText('mail', 'Email:')
            ->addRule(Form::FILLED, 'Zadejte email')
            ->addRule(Form::EMAIL, 'Email nemá správný formát');
        $form->addTextarea('message', 'Zpráva:')
            ->addRule(Form::FILLED, 'Zadejte zprávu');
        $form->addSubmit('send', 'Odeslat');

        $form->onSuccess[] = $this->processContactForm;

        return $form;
    }

    public function processContactForm(Form $form)
    {
        $values = $form->getValues(TRUE);

        $message = new Message;
        $message->addTo('info@test.com')
            ->setFrom($values['mail'])
            ->setSubject('Zpráva z kontaktního formuláře')
            ->setBody($values['message'])
            ->send();

        $this->flashMessage('Zpráva byla odeslána');
        $this->redirect('this');
    }


    /**
     * @autowire
     * @var \App\Model\YoutubeModel
     */
    protected $youtube;

    /**
     * @autowire
     * @var \App\Model\CarouselModel
     */
    protected $carousel;

    /**
     * @autowire
     * @var \App\Model\StrankyModel
     */
    protected $stranky;

    /**
     * @autowire
     * @var \App\Model\SlideshowModel
     */
    protected $slider;

    /**
     * @autowire
     * @var \App\Model\TextModel
     */
    protected $text;

    public function renderDefault() {
        $this->template->yt = $this->youtube->findAll();
        $this->template->stranky = $this->stranky->findAll();
        $this->template->slide = $this->slider->findAll();
        $this->template->carousel = $this->carousel->findAll();
        $this->template->text = $this->text->findAll()->where('pozice', '1');
        $this->template->texts = $this->text->findAll()->where('pozice', '0');
    }

}

Editoval Sveet (25. 8. 2014 17:04)

Jan Endel
Člen | 1016
+
0
-

Zkus to v rámci debugu přepsat ještě na toto:

use Nette\Application\UI\Form as NForm;
$form = new NForm();

Editoval Jan Endel (25. 8. 2014 18:07)

wicked
Člen | 290
+
-7
-

V tom je problém, máš 2× use, když je sloucis dohromady, bude to ok

Jan Endel
Člen | 1016
+
0
-

Ne.

Šaman
Člen | 2666
+
0
-

A při použití $form = new \Nette\Application\UI\Form(); ti to označí stále stejný řádek se stejnou chybou?

Editoval Šaman (25. 8. 2014 18:42)

Šaman
Člen | 2666
+
0
-

Tohle je divné, imho bude chyba mimo tenhle kód. Použije se určitě tento kód? (Když třeba před tím řádkem vyhodíš výjimku, projeví se to?)
Chyba je určit v NS, předpokládám, že máš php minimálně 5.3 (to by házelo jinou chybu). Prochází ti requirement-checker? Sorry za blbé dotazy, ale v kódu, který jsi sem dal, chyba není.

Sveet
Člen | 55
+
0
-

Takže jsem celý formulář přesunul do BasePresenter a vypadá to, že vše funguje, bohužel to nemám jak na localhostu otestovat.