$router->withPath(.) způsobí chybu v Routing Debugger?

m.brecher
Generous Backer | 872
+
+2
-

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?

David Grudl
Nette Core | 8228
+
+6
-

Opraveno v nette/application 3.1-dev

emololftw
Člen | 82
+
0
-

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!

David Grudl
Nette Core | 8228
+
0
-

Ne, withPath nemuže obsahovat parametry.

m.brecher
Generous Backer | 872
+
0
-

@DavidGrudl dne jsem to testoval na verzi nette/application 3.1.5. a funguje to 100% :)

David Grudl
Nette Core | 8228
+
0
-

Super

m.brecher
Generous Backer | 872
+
0
-

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

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

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

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

@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)

Marek Bartoš
Nette Blogger | 1275
+
0
-

Nainstaluj si git

m.brecher
Generous Backer | 872
+
0
-

@DavidGrudl Ahoj, stáhl jsem si verzi nette/application v3.1-dev s tím fixem a už to funguje :), díky

m.brecher
Generous Backer | 872
+
0
-

@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
+
+1
-

Zkusil jsem to udělat pořádně a poslal do 3.1-dev nový fix, snad už to konečně bude ok :)

m.brecher
Generous Backer | 872
+
+1
-

@DavidGrudl Ahoj, díky moc, teď už funguje bez vady všechno, SUPER !!