$router->withPath(.) způsobí chybu v Routing Debugger?
- m.brecher
- Generous Backer | 872
Vytvořil jsem si ve třídě RouterFactory takovouto sadu rout:
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->withPath('admin/')
->addRoute('', 'Admin:Entry:default')
->addRoute('<presenter>/<action>[/<id>]', ['module' => 'Admin'])
->end();
$router->addRoute('', 'Article:homepage');
$router->addRoute('[<url>]', 'Article:view');
return $router;
}
Tyto routy fungují přesně jak požaduji:
- /admin/presenter/action/id se přeloží na administrační presentery v modulu Admin,
- /admin/ se přeloží na presenter Admin:Entry:default
- / se přeloží na presenter Article:homepage
- /nejaky-clanek se přeloží na Article:view, $url = nejaky-clanek
Co nefunguje správně je Routing Debugger – panel pro routy v Tracy Bar – ten zobrazuje úplně jiné hodnoty úřekladů než Router ve skutečnosti přeloží !!!
Příklad: /admin/pricelist/create-table ⇒ se správně přeloží na Admin:Pricelist:createTable
ale panel zobrazí překlad na Admin:Admin:pricelist:
Příklad /admin/ ⇒ se správně přeloží na Admin:Entry:default
ale panel zobrazí překlad na Article:view
Příklad /admin /pricelist/update-table/2 ⇒ se správně přeloží na Admin:Pricelist:updateTable
ale panel zobrazí neplatný překlad „no route“
Myslím, že nikde nemám nic špatně a že chyba bude v Router Debugger, neporadil by někdo, jak to lépe udělat?
- emololftw
- Člen | 82
Ahoj, jen z dovolením využiju vlákno pro maličkou otázku. Mohu použít
metodu withPath()
jako prefix delšího zápisu parametrů? Mam
mnoho rout kde používám:
//<customerId>.%domain%/<locale=cs_CZ cs_CZ|en_US|de_DE>/monitoring[/<module>]
pomocí metody jsem zkoušel tento string narvat jako parametr metody, ale
neúspěšně. Teď to řeším, že mám konstantu v RouterFactory a
v každé routě uvadím self::PREFIX .....
Chci se zeptat jestli
je i k takovým případům metoda withPath()
určena.
Děkuji!
- m.brecher
- Generous Backer | 872
@DavidGrudl Tak jsem slavil předčasně, hlášená chyba je odstraněna – byla v modulu AdminModule, ale objevila se nová chyba – tentokrát v „root“ modulu a sice zřejmě v důsledku upgrade tracy/tracy z v2.8.9 na v2.9.0. – celý panel kde je routa hlásí „Error: Nette\Bridges\ApplicationTracy\RoutingPanel“ a v panelu je výpis:
Nette\InvalidArgumentException: ScriptPath '/cli/karban/www/admin/' doesn't match path '/cli/karban/www/' in C:\www\cli\karban\vendor\nette\http\src\Http\UrlScript.php:108
Stack trace:
#0 C:\www\cli\karban\vendor\nette\http\src\Http\UrlImmutable.php(196): Nette\Http\UrlScript->build()
#1 C:\www\cli\karban\vendor\nette\http\src\Http\UrlScript.php(58): Nette\Http\UrlImmutable->withPath('...')
#2 C:\www\cli\karban\vendor\nette\application\src\Bridges\ApplicationTracy\RoutingPanel.php(108): Nette\Http\UrlScript->withPath('...', '...')
#3 C:\www\cli\karban\vendor\nette\application\src\Bridges\ApplicationTracy\RoutingPanel.php(116): Nette\Bridges\ApplicationTracy\RoutingPanel->analyse(Object(Nette\Application\Routers\RouteList), Object(Nette\Http\Request), '', '...', false, 0, 0)
#4 C:\www\cli\karban\vendor\nette\application\src\Bridges\ApplicationTracy\RoutingPanel.php(60): Nette\Bridges\ApplicationTracy\RoutingPanel->analyse(Object(Nette\Application\Routers\RouteList), Object(Nette\Http\Request))
#5 C:\www\cli\karban\vendor\tracy\tracy\src\Tracy\Bar\Bar.php(140): Nette\Bridges\ApplicationTracy\RoutingPanel->getTab()
#6 C:\www\cli\karban\vendor\tracy\tracy\src\Tracy\Bar\Bar.php(113): Tracy\Bar->renderPanels('')
#7 C:\www\cli\karban\vendor\tracy\tracy\src\Tracy\Bar\Bar.php(87): Tracy\Bar->renderPartial('...')
#8 C:\www\cli\karban\vendor\tracy\tracy\src\Tracy\Debugger\DevelopmentStrategy.php(138): Tracy\Bar->render(Object(Tracy\DeferredContent))
#9 C:\www\cli\karban\vendor\tracy\tracy\src\Tracy\Debugger\Debugger.php(295): Tracy\DevelopmentStrategy->renderBar()
#10 [internal function]: Tracy\Debugger::shutdownHandler()
#11 {main}
Tato chyba nastane, pokud jsem mimo path /admin, v AdminModulu tracy funguje 100%.
Routy mám takto:
final class RouterFactory
{
use Nette\StaticClass;
public static function createRouter(): RouteList
{
$router = new RouteList;
$router->addRoute('sign-in', 'Sign:in'); /* zde dojde k chybě */
$router->addRoute('sign-out', 'Sign:out');
$router->withPath('admin/') /* v této sekci k chybě nedochází */
->addRoute('', 'Admin:Home:default')
->addRoute('help', 'Admin:Home:help')
->addRoute('pricelist-action/<id \d+>', 'Admin:PricelistAction:default') /* must be int, to prevent duplicity */
->addRoute('pricelist-row/<id>', 'Admin:PricelistRow:edit')
->addRoute('<presenter>/<action>[/<id \d+>]', ['module' => 'Admin'])
->end();
$router->addRoute('', 'Article:homepage'); /* zde dojde k chybě */
$router->addRoute('<url>', 'Article:product'); /* zde dojde k chybě */
return $router;
}
}
- David Grudl
- Nette Core | 8228
Nemám teď hlavu se tomu věnovat do hloubky, ale zkusil jsem do nette/application v3.1-dev poslat fix, který mě napadl jako první, tak to prosím zkus. S Tracy to rozhodně nesouvisí.
- m.brecher
- Generous Backer | 872
@DavidGrudl Ahoj, máš pravdu, downgradoval jsem na původní verzi tracy/tracy a ta chyba tam je pořád. Zkusil jsem tedy upgradovat nette/application takto:
>composer require nette/application:3.1-dev
ale nepochodil jsem:
[InvalidArgumentException]
Could not find package nette/application in a version matching 3.1-dev
Potřeboval bych poradit, jak upgradovat na tu verzi nette/application v3.1-dev
- Marek Bartoš
- Nette Blogger | 1275
composer require nette/application:^3.1.x-dev
- bez
^
instaluješ konkrétní tag, commit či branch, což3.1-dev
není. - bez
.x
by nainstaloval dev verzi jen v případě, že nemáš v configu"prefer-stable": true
- m.brecher
- Generous Backer | 872
@MarekBartoš Díky moc za ukázku, tohle funguje, ale mám tam ještě nějaký problém, takže se operace nedokončila, můžeš ještě poradit jak dál?
C:\www\cli\karban>composer require nette/application:^3.1.x-dev
./composer.json has been updated
Running composer update nette/application
Loading composer repositories with package information
Updating dependencies
Lock file operations: 0 installs, 1 update, 0 removals
- Upgrading nette/application (v3.1.5 => v3.1.x-dev 25f7c1e)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 0 installs, 1 update, 0 removals
- Removing nette/application (v3.1.5)
- Installing nette/application (v3.1.x-dev 25f7c1e): Cloning 25f7c1e778
Update of nette/application failed
Installation failed, reverting ./composer.json and ./composer.lock to their original content.
[RuntimeException]
Failed to clone https://github.com/nette/application.git, git was not found, check that it is installed and in your PATH env.
'git' is not recognized as an internal or external command,
operable program or batch file.
Nevyžaduje to nějakou registraci na githubu? – nebo nějakou instalaci gitu na mojí vývojovém pc ?
Editoval m.brecher (11. 2. 2022 20:00)
- m.brecher
- Generous Backer | 872
@DavidGrudl Předčasně jsem se radoval – fix v v3.1-dev odstraní chybu v Tracy ve FrontModulu (mimo cestu withPath() v Routeru), ale v AdminModulu (cesta /admin/…) jsou zase chyby v route panelu – podobné byť trochu jiné jako na počátku. Je to zřejmě komplexněji provázané. Nijak zásadně mě to nevadí, takže to nespěchá.
- David Grudl
- Nette Core | 8228
Zkusil jsem to udělat pořádně a poslal do 3.1-dev nový fix, snad už to konečně bude ok :)