Nette 2.1 jak do vlastního routeru dostat DB

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

Zdravim.

V nejnovější verzi Nette 2.1 píšu vlastní router pro hezké odkzaky na uživatelské účty:
…cz/uzivatel/nick

RouterFactory.php

$route = new UserRouter('uzivatel/<id>[-<nick>]', 'Front:User:detail');
$router[] = $route;

UserRouter.php

<?php

//routovani uzivatelskych jmen
class UserRouter extends Nette\Application\Routers\Route
{
    public function constructUrl(Nette\Application\Request $appRequest, Nette\Http\Url $refUrl)
    {
        // upravím parametry
        $params = $appRequest->getParameters();

	$params['nick'] = "funguje";

        $appRequest->setParameters($params);

        // vytvořím url
        return parent::constructUrl($appRequest, $refUrl);
    }
}

Jak mám do UserRouter.php dostat databázi bych se podíval podle ID jaký má uživatel nick a vrátil ho?

Děkuji za rady

Marek Šneberger
Člen | 130
+
0
-
private $repo;

public function __construct(\Repositories\UsersRepository $repo)
{
    $this->usersRepository = $repo;
}

A pak v oněch metodách klasicky

$user = $this->usersRepository->findByNick(....);
motorcb
Člen | 552
+
0
-

@Marek Šneberger:

Díky, ale tím si získám repository pro RouterFactory.php, jak ale to repository dostanu do UserRouter???

class RouterFactory
{
    private $userRepository;

    public function __construct( Repository\User $userRepository )
    {
        $this->userRepository = $userRepository;
    }
Marek Šneberger
Člen | 130
+
0
-

Tak ho nedávej do RouterFactory, kde je ti nejspíš k ničemu, ale vlož to do UserRouter ne?

Popřípadě se mrkni sem :-)

motorcb
Člen | 552
+
0
-

@Marek Šneberger:

Paráda, díky, šel jsem na to úpně špatně :-)

Dokázal by mi někdo vysvětlit jak přesněji funguje ukázkový router od Honzy Tvrdíka

Nyní mám url ve tvaru:

<a href="{plink :Front:User:detail, $user->id}">       => /user/detail/9

Já bych na to chtěl poslat vlastní router, který by změnil url na:
/user/detail/<id>-<nick>

Jen to z té ukázky nevykoukám :-(

Díky

Marek Šneberger
Člen | 130
+
0
-

Implementace SlugManageru by tě mohla nakoupnout :)

motorcb
Člen | 552
+
0
-

@Marek Šneberger:
Tomu rozumím, jen nevím jak funguje match **a **constructUrl a kde se skládá výsledný tvar routy?
Popřípadě jak poznám, že se tato routa má aplikovat na danou URL?

Jan Tvrdík
Nette guru | 2595
+
0
-

Potřebuješ ten odkaz tvořit takto:

<a href="{plink :Front:User:detail, id => $user->id, nick => $user->nick}">
Jan Tvrdík
Nette guru | 2595
+
0
-
$route = new Route('uzivatel/<id>-<nick>', 'Front:User:detail');
motorcb
Člen | 552
+
0
-

@Jan Tvrdík:

Chtěl bych si to zkusit přes vlastní router…