Problém s routováním a moduly, nenačítá se Error Presenter

Kcko
Člen | 465
+
0
-

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)

MajklNajt
Člen | 471
+
+1
-

Skúšal si pustiť composer dump-autoloader?

Kcko
Člen | 465
+
0
-

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 | 465
+
0
-

Stejně by mě zajímalo, proč sem tak musel učinit (nebo co jsem si nepřečetl pozorně / nepochopil), myslel jsem, že příkazem dump-autoload ovlivňuji přegenerování, když se něco změní ve vendoru, což se tady nedělo.

MajklNajt
Člen | 471
+
0
-

Podľa toho, ako máš v composer.json zadefinovaný autoloading pre zložku app, podľa toho sa to správa.

Kcko
Člen | 465
+
0
-

MajklNajt napsal(a):

Podľa toho, ako máš v composer.json zadefinovaný autoloading pre zložku app, podľa toho sa to správa.

Defaultně, co by tam teda mělo být?

    "autoload": {
        "psr-4": {
            "App\\": "app"
        }
    },
Kcko
Člen | 465
+
0
-

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 | 471
+
0
-

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 | 465
+
0
-

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 | 471
+
0
-

a máš robot loader nainštalovaný a nakonfigurovaný? https://doc.nette.org/cs/robot-loader

Kcko
Člen | 465
+
0
-

No jasně, instaloval sem ten vychozi skelet viz

composer create-project nette/web-project nette-blog

Marek Bartoš
Nette Blogger | 1165
+
+2
-

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 | 465
+
0
-

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.