NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 1 - E-shop v Nette - Založení projektu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Milan Gallas
Tvůrce
Avatar
Milan Gallas:8.10.2015 11:29

Ahoj Provedl jsem změny, co tu jsou a mám tam chybu v tom předávání závislotí(DI).

Nette\DI\ServiceCreationException

Service 'application.1': Class App\Presenters\BaseFormFactory does not exist    search►

Caused by ReflectionException
Source file

Call stack

...\vendor\nette\di\src\DI\Compiler.php:212     source  Nette\DI\ContainerBuilder->     generateClasses (arguments)

...\vendor\nette\di\src\DI\Compiler.php:141     source  Nette\DI\Compiler->     generateCode (arguments)

...\vendor\nette\bootstrap\src\Bootstrap\Configurator.php:268   source  Nette\DI\Compiler->     compile ()

inner-code      Nette\Configurator->    generateContainer (arguments)

...\vendor\nette\di\src\DI\ContainerLoader.php:113      source  call_user_func_array (arguments)

...\vendor\nette\di\src\DI\ContainerLoader.php:78       source  Nette\DI\ContainerLoader->      generate (arguments)

...\vendor\nette\di\src\DI\ContainerLoader.php:43       source  Nette\DI\ContainerLoader->      loadFile (arguments)

...\vendor\nette\bootstrap\src\Bootstrap\Configurator.php:222   source  Nette\DI\ContainerLoader->      load (arguments)

...\app\bootstrap.php:19        source  Nette\Configurator->    createContainer ()

 9:
10:    $configurator->setTempDirectory(__DIR__ . '/../temp');
11:
12:    $configurator->createRobotLoader()
13:        ->addDirectory(__DIR__)
14:        ->register();
15:
16:    $configurator->addConfig(__DIR__ . '/config/config.neon');
17:    $configurator->addConfig(__DIR__ . '/config/config.local.neon');
18:
19:    $container = $configurator->createContainer();
20:
21:    return $container;

ps. kód jsem i zkopíroval, abych tam náhodou neměl překlep a stejně to nejede. Tan řádek do souboru config.neon, tam mám přidaný

 
Odpovědět
8.10.2015 11:29
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Milan Gallas
Jindřich Máca:8.10.2015 13:20

Ahoj, tak chyba je poměrně jasná. :-)

Class App\Presenter­s\BaseFormFac­tory does not exist

Chyba je sice jasná, ale může mít více možných příčin. Nejdříve bych asi zkontroloval že:

  1. Třídu jsi zkutečně vytvořil tam, kde na ní referuješ v konfiguračním souboru.
  2. Máš k ní všude uvedené správné cesty.
  3. Napsal jsi do ní správný namespace.

Pokud nic z toho nezabere, tak bude pes zakopaný ještě někde jinde. Potom bych Tě poprosil o obsah třídy samotné a obsah konfiguračního souboru, kde si ji registruješ do DI. ;-)

 
Odpovědět
8.10.2015 13:20
Avatar
igor.pocta
Člen
Avatar
igor.pocta:9.1.2016 19:18

Ahoj, má nějaký speciální význam mít ty chybové typy zpráv v BasePresenteru namísto přímo v továrničce BaseFormFactory?

Odpovědět
9.1.2016 19:18
alea iacta est
Avatar
Vít Cigánek:9.1.2016 19:27

Určitě má, protože je můžeš používat na více presenterech a to jenom k vůli toho, že se prostě zdědí.

 
Odpovědět
9.1.2016 19:27
Avatar
igor.pocta
Člen
Avatar
Odpovídá na Vít Cigánek
igor.pocta:9.1.2016 19:31

Díky za objasnění. Já to spíše myslel tak, že bych měl vše pohromadě a v presenterech používal konstantu z BaseFormFactory. Ale uznávám, je jednodušší mít to přímo v presenteru.

Odpovědět
9.1.2016 19:31
alea iacta est
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na igor.pocta
Jindřich Máca:9.1.2016 19:32

Ahoj, pro funkčnost ne, protože PHP konstanty můžeš volat, ať budou kdekoliv, ale návrhově rozhodně ano. Tyto konstanty se mají používat ve spojitosti s metodou flashMessage(), což je ale výhradní metoda pro presentery. Mohou se tedy použít při volání této metody úplně mimo souvislost s BaseFormFactory, takže umisťovat je tam, nedává smysl. :)

 
Odpovědět
9.1.2016 19:32
Avatar
igor.pocta
Člen
Avatar
Odpovídá na Jindřich Máca
igor.pocta:9.1.2016 19:41

I Tobě díky za ujasnění :-) Já právě nejvíc tápu v tom návrhovém designu :)

Odpovědět
9.1.2016 19:41
alea iacta est
Avatar
Odpovídá na Jindřich Máca
Dominik Gavrecký:3.6.2017 21:15

Nemáš tam niekde niečo v kóde schované na debug ? Stiahol som tvoj kód všetko fajn len mi nejakým spôsobom nejde zapnúť debug mod hodí mi len klasickú hlášku "Omlouvám se! Na serveru..." spolu s tracy ...

$configurator->setDebugMode(TRUE);
$configurator->enableDebugger(__DIR__ . '/../log');
Odpovědět
3.6.2017 21:15
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Jindřich Máca
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Jindřich Máca:3.6.2017 21:52

Ne, určitě tam nemám nic "schované". :D

 
Odpovědět
3.6.2017 21:52
Avatar
rosatislav
Člen
Avatar
rosatislav:29.9.2017 18:17

Zdravím, chtěl bych se zeptat na tu metodu inject.

Zajímalo by mne, jak to vlastně funguje. Pokud v nějakém presenteru nepoužiju proměnnou $formfactory, tak se tato metoda ani nikdy nezavolá? Takže by to znamenalo, že v momentě kdy budu v nějaké metodě chtít použít $formFactory, tak Nette zjistí, jestli je tato proměnná nastavena a pokud ne tak zavolá metodu injectFormFac­tory()?

předpokládám, že aby Nette zjistilo, kterou metodu zavolat, tak je důležité aby její název obsahoval název té proměnné?

 
Odpovědět
29.9.2017 18:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 20.