Router vytvorí link, na ktorý potom reaguje #404 No route for HTTP request

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
OKweb
Člen | 12
+
0
-

Ahojte,

poprosím o pomoc s nasledovným problémom. V RouterFactory mám nasledovné routy:

		$router[] = new Route(
			'//shop.avg.sk/admin/[<presenter ^(?!Product).*>/[<action>/]]',
			array(
                'presenter' => 'Admin',
                'action' => 'default'
            )
        );
		$router[] = new Route(
			'//shop.avg.sk/<slug>/',
			array(
                'presenter' => 'Product',
                'action' => 'default'
            )
        );

V prvej route cez regulárny výraz vyraďujem výskyt slova „Product“, lebo pre prezentáciu produktov chcem špeciálne linky, ktoré sú definované v druhej route. Tie aj fungujú v poriadku, generuje ich aj dajú sa použiť. Rovnako správne funguje Admin:default a http://shop.avg.sk/admin/.

Problém mám, že {link Cisla:default} vygeneruje síce správny link http://shop.avg.sk/admin/cisla/, keď ho však otvorím, zahlási #404 No route for HTTP request.

Nevedel by mi niekto, prosím, poradiť, kde môže byť chyba? Ďakujem!

Editoval OKweb (10. 2. 2015 17:57)

OKweb
Člen | 12
+
0
-

Obišiel som to takto:

		$router[] = new Route(
			'//shop.avg.sk/admin/[<presenter=Admin>/[<action=default>/]]',
			array(
                'presenter' => array(
                    Route::FILTER_IN => function($presenter) {
                        if (strtolower($presenter) == 'product')
                            return null;
                        else
                            return strtolower($presenter);
                    },
                    Route::FILTER_OUT => function($presenter) {
                        if (strtolower($presenter) == 'product')
                            return null;
                        else
                            return strtolower($presenter);
                    }
                )
            )
        );
		$router[] = new Route(
			'//shop.avg.sk/<slug>/',
			array(
                'presenter' => 'Product',
                'action' => 'default'
            )
        );