Problém s routováním a moduly, nenačítá se Error Presenter
- Kcko
- Člen | 470
Ahoj,
stáhl jsem si Nette 3.1 a upravil na moduly tak jak jsem zvyklý.
Tj.
Router
final class RouterFactory
{
use Nette\StaticClass;
public static function createRouter(): RouteList
{
$router = new RouteList;
$router[] = $front = new RouteList('Front');
//$router[] = $back = new RouteList('Back');
$front->addRoute('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
}
K tomu jsem ekvivalentně upravil NS viz.
namespace App\FrontModule\Presenters;
use Nette;
final class HomepagePresenter extends Nette\Application\UI\Presenter
{
}
namespace App\FrontModule\Presenters;
use Nette;
final class Error4xxPresenter extends Nette\Application\UI\Presenter
{}
V neonu jsem upravil nastavení:
application:
errorPresenter: Front:Error
mapping:
*: App\*Module\Presenters\*Presenter
Vymazána keš a dostávám tuto hlášku https://bit.ly/3N96Wb0 a je vidět, že se to stále chce načítat z původního NS / adresáře, nevím ale, kde to změnit?
Editoval Kcko (17. 3. 2022 11:34)
- Kcko
- Člen | 470
MajklNajt napsal(a):
Skúšal si pustiť composer dump-autoloader?
Nezkoušel, ve starších verzích Nette (<= 2.4) jsem to nepotřeboval a zrovna jsem to četl, když jsi napsal (https://doc.nette.org/…ces/composer#…)
Funguje, díky :)
- Kcko
- Člen | 470
MajklNajt napsal(a):
Viac info tu https://getcomposer.org/…04-schema.md#…
Čtu to, ale stejně mi to není úplně jasné. Je to pod složkou App, takže je jedno jestli tam jsou další adresáře typu
- FrontModule\Presenters
- BackModule\Presenters
nebo jen
- Presenters
Já jsem udělal jen to, že jsem si upravil routování viz výše a pomohl mi až pak onen příkaz. Stále nechápu.
- MajklNajt
- Člen | 502
keď použiješ
{
"autoload": {
"classmap": [
"app/"
]
}
}
composer si prechádza tú zložku a všetky nájdené classy si zmapuje (ich cesty), a namiesto includovania každého jedného súboru si ty v index.php includuješ iba
require __DIR__ . "/../vendor/autoload.php";
keď potom hocičo v zložke app zmeníš (názov, cestu, namespace), tak musíš nanovo zmapovať tú zložku
Editoval MajklNajt (17. 3. 2022 20:29)
- Kcko
- Člen | 470
MajklNajt napsal(a):
keď použiješ
{ "autoload": { "classmap": [ "app/" ] } }
composer si prechádza tú zložku a všetky nájdené classy si zmapuje (ich cesty), a namiesto includovania každého jedného súboru si ty v index.php includuješ iba
require __DIR__ . "/../vendor/autoload.php";
keď potom hocičo v zložke app zmeníš (názov, cestu, namespace), tak musíš nanovo zmapovať tú zložku
Děkuju za vysvětlení, myslel jsem, že tohle řeší Robot Loader a je to nějaké nepraktické, upravím adresář v App jako dnes (z App\Presenters na App\Front\Presenters) a pokaždé musím přegenerovat, jde to řešit nějak méně násilně?
- MajklNajt
- Člen | 502
a máš robot loader nainštalovaný a nakonfigurovaný? https://doc.nette.org/cs/robot-loader
- Marek Bartoš
- Nette Blogger | 1280
S PSR-4 by ta tvá chyba reálně nikdy neměla vzniknout. Nepoužil jsi v Composeru přepínač –optimize-autoloader? Ten způsobí, že se ze všech tříd a souborů vytvoří statická mapa (tatáž co používá autoload > classmap), a tak se přejmenování, vytváření a mazání tříd neprojeví a spadne to právě na neexistujícím souboru. Tenhle přepínač se hodí používat při deployi appky kvůli vyšší rychlosti, pro vývoj vhodný není.
- Kcko
- Člen | 470
Ahoj, ne, ani to neznám.
Stáhl jsem projekt, tak jak je popsáno zde: https://doc.nette.org/cs/quickstart
A jediné co jsem udělal, že jsem si upravil strukturu na moduly, tj.
- Změna NS v presenterech (Error, Home)
- Změna NS v neonu (mapping Error presenteru)
- Změna filesystemu (vytvoření adresářů a přesun z původní složky App\Presenters na App\FrontModule\Presenters*)
- Změna v routeru na moduly
- Výmaž keše
a pak jsem se nestačil divit.