Generování url adres v šabloně přes třídy
- Martk
- Člen | 661
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ů.
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.
- jiri.pudil
- Nette Blogger | 1029
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
@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
@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