Webová a disková cesta k adresáři přes config

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

Zdravím,
jak řešíte když potřebuje komponentě vytvářené přes továrničky předat webovoudiskovou 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
+
0
-

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ší :)

Aleš
Člen | 30
+
0
-

:-/ Skončil jsem u v podstatě identického řešení, jenom používám továrničky z configu.