Píšeme první aplikaci (obecné)

formacz
Člen | 7
+
0
-

Ahoj všem,

chtěl jsem se zeptat, procházím si Píšeme první aplikaci a došel jsem do sekce Model, kde se zahajuje práce se službami Service.

Pokud to napíšu podle návodu, tak Laděňka vyhodí
Service app/Model/articleManager not found.

Zkoušel jsem i procházet fóra, ale nic.

Složka Model leží správně v app:
:app
:->Model
::→ ArticleManager.php

Cache jsem smazal a nic .. :-(
Nějak už netuším co by mohlo být špatně.

Tady je odkaz na laděnku.
Tracy – Service Not Found

Děkuji moc za radu

MF.

David Matějka
Moderator | 6445
+
0
-

ahoj, muzes ukazat ten soubor ArticleManager.php? mas tam spravne namespace?

formacz
Člen | 7
+
0
-

Ahoj,

tady to je ..
ArticleManager.php

Díky

David Matějka
Moderator | 6445
+
0
-

Zkus opravit v názvu namespace app na App

ForestCZE
Člen | 209
+
0
-

Ahoj, v tom namespace by měla být velká písmena

namespace App\Model;

A v configu to zaregistrované máš?

EDIT: David rychlejší :)

Editoval ForestCZE (18. 3. 2020 23:20)

chemix
Nette Core | 1294
+
+1
-

Ahoj

namespace ma na obou mistech napsan stejne s malym „a“ (ikdyz bych doporucoval psat velke A) spis si myslim ze problem je v nazvu tridy.

Registrovan a dohledavan je „app/Model/articleManager“ s malym article ale trida je pak definovana s velkym Article.

S timhle by ti mel pomoci plugin NEON a Nette do PhpStormu, ktery umi naseptavat tridy, ktere jsou pouzivany v aplikaci.

formacz
Člen | 7
+
0
-

ahoj všem,

díky za rady.

S malým „a“ v názvu namespace to funguje, protože ve stromě mám „app“
Zajímavý je, že to včera nejelo a dnes po nastartování pc, to valí.
Reaguje to na výměnu „a“, tzn. z velkým A to nejede a laděnka vyhodí chybu. S malým „a“ to jede.

2chemix: zkoušel jsem a reaguje to. Tzn. máš pravdu.

Nebude a nebo nemůže být někde zakopanej pes v cache prohlížeče??

M.

formacz
Člen | 7
+
0
-

Ted mě ještě napadá, že jsem provedl očistu pc .. „vyčištění disku“, kde jsou samozřejmě nějaký dočasný soubory prohlížeče.

M.

GEpic
Člen | 562
+
+1
-

Ahoj, na názvech složek nezáleží, stejně tak i kdyby byl namespace úplně jiný než tvoje stromová struktura složek (je ale samozřejmě dobré to dodržovat kvůli PSR4). Měl bys dodržovat CamelCase notaci, čili vždy začít slova velkým písmenem a ostatní malá. Také nezáleží na cache v prohlížeči, spíš záleží na cache přímo v projektu ve složce temp, která by ale neměla se zapnutou laďenkou dělat problém.

Ještě nám ukaž svůj config.neon. Mám pocit, že to nemáš správně zaregistrované.

PS: Neukončuj PHP soubory → ?>

Editoval GEpic (24. 3. 2020 1:28)

Marek Bartoš
Nette Blogger | 1146
+
0
-

na názvech složek nezáleží, stejně tak i kdyby byl namespace úplně jiný než tvoje stromová struktura složek (je ale samozřejmě dobré to dodržovat kvůli PSR4).

Robotloaderu na tom nezáleží, třídy najde kdekoli v prohledávaných složkách. V případě composer autoloaderu záleží na tom, zda se používá classmap nebo psr-4. Classmap najde soubory kdekoli, ale musí se aktualizovat při přidání nové třídy, u psr-4 je nutné strukturu dodržovat.

https://www.php-fig.org/psr/psr-4/
https://getcomposer.org/…04-schema.md#…

Zajímavý je, že to včera nejelo a dnes po nastartování pc, to valí.

Zkontroloval bych nastavení opcache, jestliže se změny neprojevují ihned (v případě robotloaderu do druhého requestu)

S malým “a” v názvu namespace to funguje, protože ve stromě mám “app”

Na odpovídající stromové struktuře záleží jen autoloaderům, v tomhle případě byl imho hlavní problém v tom, že když třídu pojmenuješ App\Model\ArticleManager, tak nemůžeš při použití psát app\Model\articleManager (na velikosti písmen v názvu třídy záleží)

Editoval Mabar (24. 3. 2020 10:34)

formacz
Člen | 7
+
0
-

GEpic napsal(a):

Ahoj, na názvech složek nezáleží, stejně tak i kdyby byl namespace úplně jiný než tvoje stromová struktura složek (je ale samozřejmě dobré to dodržovat kvůli PSR4). Měl bys dodržovat CamelCase notaci, čili vždy začít slova velkým písmenem a ostatní malá. Také nezáleží na cache v prohlížeči, spíš záleží na cache přímo v projektu ve složce temp, která by ale neměla se zapnutou laďenkou dělat problém.

Ještě nám ukaž svůj config.neon. Mám pocit, že to nemáš správně zaregistrované.

PS: Neukončuj PHP soubory → ?>

Proč se neukončují php soubory ‚?>‘ ??

No jak jsem psal, CACHE jsem vyprázdnil v projektu, ale to nic nedělalo, pomohlo až odstranění při čištění. Budu to sledovat.

<script>
parameters:


application:
	errorPresenter: Error
	mapping:
		*: App\*Module\Presenters\*Presenter

session:
	expiration: 14 days
	debugger: true


services:
	router: App\Router\RouterFactory::createRouter
	- app\Model\articleManager
</script>

S tímhle to jede :-)

formacz
Člen | 7
+
0
-

2GEpic a Mabar: Jinak borci, díky moc

Šaman
Člen | 2632
+
+3
-

formacz napsal(a):
Proč se neukončují php soubory ‚?>‘ ??

Protože

  • je to nepovinné, php kód se ukonči s koncem souboru
  • ale pokud ukončíš kód značkou a po ni bude ještě cokoliv (mezera, odřádkování), tak se to může poslat na výstup jako statický kód a to pak zlobit (chyby typu nelze odeslat hlavičku, protože na výstup už bylo něco odeslané).

A vzhledem k tomu, že veškerý php kód Nette aplikace by měl být v třídách, tedy celý soubor jen php kód a nic jiného, je ukončování zbytečné. Šablony tohle sice nesplňují, ale ty jsou generované strojově, tam nehrozí právě že se po ukončení značky zapíše třeba ta mezara, tabulátor nebo odřádkování.

Editoval Šaman (25. 3. 2020 3:22)

formacz
Člen | 7
+
0
-

Šaman napsal(a):

formacz napsal(a):
Proč se neukončují php soubory ‚?>‘ ??

Protože

  • je to nepovinné, php kód se ukonči s koncem souboru
  • ale pokud ukončíš kód značkou a po ni bude ještě cokoliv (mezera, odřádkování), tak se to může poslat na výstup jako statický kód a to pak zlobit (chyby typu nelze odeslat hlavičku, protože na výstup už bylo něco odeslané).

A vzhledem k tomu, že veškerý php kód Nette aplikace by měl být v třídách, tedy celý soubor jen php kód a nic jiného, je ukončování zbytečné. Šablony tohle sice nesplňují, ale ty jsou generované strojově, tam nehrozí právě že se po ukončení značky zapíše třeba ta mezara, tabulátor nebo odřádkování.

Díky moc