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'
    )
);