screencast Kontaktní formulář – Component with name ‚ContactForm‘ does not exist

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

Ahoj,

vytvořil jsem, myslím, vše podle návodu v uvedeném screencastu. Ale Nette nějak nemůže načíst tu třídu ContactForm. Moje doměnka: musím Nette říct, že má načítat tuhle komponentu ze složky app/forms. Je to tak nebo to umí načíst sám a chyba je jinde?

Díky za rady

Cifro
Člen | 245
+
0
-

Hore je poličko na vyhľadávanie…

https://forum.nette.org/…es-not-exist

assassik
Člen | 43
+
0
-

pozorně si to přečti…
Component != Class

musíš udělat továrničku createComponentXYZ v presenteru viz:
https://github.com/…resenter.php#L26

vtitl
Člen | 29
+
0
-

Továrničku jsem udělal, ten Thread o tom samém jsem viděl, ale nepomohl mi.

Možná mi chybí teorie, ale zkuste mi jen říct, proč tady
{control contactForm} má být malé písmeno c (potom, co jsem to změnil to začalo fungovat)
a všude jinde to píši s velkým C (class ContactForm atd.)?

Díky za info:)

assassik
Člen | 43
+
0
-

u tříd se používá tzv. PascalCase a všude jinde (pokud se neplatu) camelCase

coding-standard

kravčo
Člen | 721
+
0
-

vtitl napsal(a):

Továrničku jsem udělal, ten Thread o tom samém jsem viděl, ale nepomohl mi.

Možná mi chybí teorie, ale zkuste mi jen říct, proč tady
{control contactForm} má být malé písmeno c (potom, co jsem to změnil to začalo fungovat)
a všude jinde to píši s velkým C (class ContactForm atd.)?

Díky za info:)

v prípade {control contactForm} je „contactForm“ názov komponenty, nie názov triedy (sú to dve rozdielne veci a vôbec nemusia byť rovnaké). Názvy komponent majú malé písmeno na začiatku – tak bezproblémovo fungujú s továrničkami.

ContactForm.php

// prispôsobený formulár
class ContactForm extends \Nette\Application\UI\Form
{
    // ...
}

ContactPresenter.php

// továrnička vytvorí komponent s názvom 'form'
public function createComponentForm($name)
{
    return new ContactForm;
}

Contact.default.latte

<!-- šablóna vykreslí komponent s názvom form -->
<div id="page">
    <h1>Contact Form</h1>
    {control form}
</div>