Generování url adres v šabloně přes třídy

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

Situace: Mám v aplikaci na několika místech stejné generování url adres, musím je psát dlouho, nedejbože se musí změnit struktura adres nebo přidat parameter do adresy nebo … a čeká mě nudná práce na x minut, hodin, dnů.

Řešení

Předchozí generování:

{link Basket:item $item->id, $item->name}

Nyní:

{url basket.item $item}

Třída:

class Basket {

	/** @var Nette\Application\LinkGenerator **/
    private $linkGenerator;

    public function __construct(Nette\Application\LinkGenerator $linkGenerator) {
        $this->linkGenerator;
    }

	/**
     * @return string
     */
    public function item(Entity\Item $item) {
        return $this->linkGenerator('Basket:view', [$item->id, $item->name]);
    }
}

PS: Jestli znáte něco na podobném principu, tak se podělte, rád se na to podívám.

enumag
Člen | 2118
+
0
-

Někteří mají udělátka co jim dovolí předávat jako parametry přímo objekty, tedy:

{link Basket:item $item}

Implementovat to univerzálně ovšem není vůbec snadné. Konkrétně mé řešení není veřejné, nevím zda nějaké veřené existuje.

jiri.pudil
Nette Blogger | 1029
+
0
-

Souhlasím s @enumag a doplním, že podoba URL je imo zodpovědností routeru a nikoho jiného. Jedna z triviálnějších implementací je např. přes filter funkce

Martk
Člen | 661
+
0
-

@enumag , @jiri.pudil Při menším projektu to chápu, ale když se jedná o velký projekt, tak těch rout musí být hodně, což znamená ve výsledku zpomalení aplikace, navíc se předpokládá, že se používá jedna univerzální routa pro většinu aplikace a předávání celé entity do univerzálního routeru se mi zdá jako špatné řešení.

Možná se pletu a budu rád, když mě navedete na správnou vlnu.

newPOPE
Člen | 648
+
0
-

@Antik zasadny problem vidim v tom, ze sa pokusas spajat Entitu (co je cast modelu) z UI vrstvou (Presenter, View, Routing, …). Cize do modelu zanasas zavislosti na URLs.

@enumag neviem ci udelatka ale toto mi fungovalo uz davno, Router je schopny vratit Objekt takisto prijat objekt (len konverziu si uz musis urobit v Routeri).

A mozno by to slo robit nejak cez pouzitie https://github.com/…/UI/Link.php a tu je tiez zmienka o tom ako som sa nad niecim podobny zamyslal ale v inom kontexte http://www.slideshare.net/…te-framework