Webová a disková cesta k adresáři přes config
- Aleš
- Člen | 30
Zdravím,
jak řešíte když potřebuje komponentě vytvářené přes továrničky
předat webovou i diskovou cestu ?
Mám komponentu pro fotky k příspěvkům a potřebuju diskovou cestu pro
nahrání souborů a webovou pro jejich zobrazování. Můžu sice předávat
parametry přímo (a ručně) přímo v parametru, ale protože musím fotky
ukládat do jiných adresářů musel bych u každé továrničky uvádět
„nazev sekce“ (pro tabulku v db), cesta na disku.„nazev sekce“, cesta
na webu.„nazev sekce“, což je očividně špatně
Můžu si speciální třídu WebDirectory která mi tohle ošetří, ale musím
jí předat HttpRequest (kvůli basePath) a webDir, což udělám jenom přes
config. Jenže to jí pak nemůžu použít v továrničce komponenty pro
fotky.
Jediné další řešení které mě napadá je udělat si presenter který bude
fotky obsluhovat, ale to mi přijde jako zhůvěřilost.
Setkal jste se s tím někdo? Jak to řešíte?
Díky za nápady
tl;dr: jak předat diskovou i webovou cestu jedním parametrem
- frosty22
- Člen | 373
Osobně to řeším tak, že mám v konfigu prostě ony cesty např:
images:
dir: "%wwwDir%/files/images"
uri: "/files/images"
A toto nastavení předávám dané komponentě, a jelikož tedy ony komponenty občas vytvářím na více místech a mít všechny továrničky v BasePresenteru se mi nechtělo, tak používám jeden objekt jako takový factories builder, třebas:
<?php
class FactoryBuilder {
...
public function createImageComponent($component, $name)
{
$image = new ImageComponent($component, $name);
$image->setUri($this->params["images"]["uri"]);
$image->setDir($this->params["images"]["dir"]);
return $image;
}
}
?>
A pak v presentrech mám ony továrničky:
<?php
protected function createComponentImage($name)
{
return $this->factoryBuilder->createImageComponent($this, $name);
}
?>
Takhle je to tedy jen výňatek oné logiky, ve finále to mám podstatně sofistikovanější :)