Jak na adresu: nazev-kategorie/5-muj-clanek

- motorcb
 - Člen | 552
 
Zdravím.
jak na adresu pro blog kde každý článek musí být v 1 kategorii.
nazev-kategorie/5-muj-clanek
Zkouším to takto:
        $router[] = new Route( '<id>', array(
            'module' => 'Blog',
            'presenter' => 'Article',
            'action' => 'detail',
            'id' => array(
                Route::FILTER_IN => $this->routerHelper->filterIn,
                Route::FILTER_OUT => $this->routerHelper->filterOutBlog
            )
        ) );
routerHelper:
    public function filterIn( $param )
    {
        $arrayParam = explode( "-", $param );
        return @$arrayParam[count($arrayParam)];
    }
    public function filterOutBlog( $blogId )
    {
        $blogRow= $this->blogRepository->find( $blogId );
        if ( $blogRow!== FALSE )
        {
            return $blogRow->category->shlug."/".$blogRow->shlug."-".$blogRow->shlug;
        }
        else
        {
            return $blogId;
        }
    }
Ovšem tento kód se vůbec nevykoná.. Rouser ho vůbec neaxceptuje
(v tracy moji routu vidím)…
Když jdu na adresu: moje-kategorie/70-zbozi dostanu zpět: No route for HTTP
request
V Tracymoji routu vidím ale nikdy se nevykoná. Co dělám špatně?
Díky za info

- Jan Mikeš
 - Člen | 771
 
Samozrejme, mas pouze <id> v route, to ti nemuze nikdy fungovat. Nepostacovalo by ti toto, bez filtru?:
// nazev-kategorie/5-muj-clanek
$router[] = new Route( '<categoryCode>/<id>-<blogPostCode>', array(
    'module' => 'Blog',
    'presenter' => 'Article',
    'action' => 'detail',
) );
S tim, ze do db si budes po pridani kategorie a blog postu ukladat code „slug“:
$code = Nette\Utils\Strings::webalize($values["name"]);
S unique keyem v db by to melo fungovat perfektne – ja pouzivam timto zpusobem a pohoda.
Editoval Lexi (1. 4. 2014 11:56)

- David Matějka
 - Moderator | 6445
 
defaultni pattern pro parametr je
vsechno krom /, uprav routu na <id .+>

- motorcb
 - Člen | 552
 
matej21:
uprav routu na
<id .+>
díky, to zabralo :-) ted uz se mi odkazy generuji ve spravnem tvaru. Ovsem
kdyz na odkaz kliknu:
/novinky/70-muj-prvni-clanek
Tracy mi vrátí: No route for HTTP request.
pritom v Tracy v pravo dole vidim, moji routu, nechápu proč není použita:
//blog.mojedomena.cz/<id .+>
Nevěděl by někdo?