Definice konstanty se slozkou pro obrazky
- konva
- Člen | 88
Ahoj
Mám složku s obrázky „www/obrazky/“ a chtel bych si definovat konstatnu
tak abych ji mel dostupnou v presenteru, komponentach i sablonach aby napr.
kdyz nahravam obrazek nemusel vzdycky psat
„move(‚www/obrazky/obrazek.jpg‘)“ ale jenom
„move(konstanta.‚/obrazek.jpg‘)“.
A v šabloně to stejné.
Díky za odpověď
Lukáš
- Pavel Macháň
- Člen | 282
konva napsal(a):
Ahoj
Mám složku s obrázky „www/obrazky/“ a chtel bych si definovat konstatnu tak abych ji mel dostupnou v presenteru, komponentach i sablonach aby napr. kdyz nahravam obrazek nemusel vzdycky psat „move(‚www/obrazky/obrazek.jpg‘)“ ale jenom „move(konstanta.‚/obrazek.jpg‘)“.
A v šabloně to stejné.
Díky za odpověď
Lukáš
Reším to tak, že si vytvořím třeba třídu ImageDirectories kterou si
přidám do služeb a konstruktorem si nastavím cesty.
Pak si službu ImageDirectories nechám injectnout kam potřebuju a data dostanu
z této služby
Příklad:
class ImageDirectories {
/** @var string */
private $original;
/** @var string */
private $thumbnail;
/**
* @param string $original
* @param string $thumbnail
*/
public function __construct($original, $thumbnail) {
$this->original = $original;
$this->thumbnail = $thumbnail;
}
/**
* @return string
*/
public function getOriginal() {
return $this->original;
}
)
/**
* @return string
*/
public function getThumbnail() {
return $this->thumbnail;
}
Config
parameters:
gallery:
thumbnail: %wwwDir%\gallery\thumbnail
original: %wwwDir%\gallery\original
services:
- ImageDirectories(%gallery.original%, %gallery.thumbnail%)
Editoval EIFEL (27. 1. 2014 12:09)
- Pavel Macháň
- Člen | 282
konva napsal(a):
no to by slo. A co to pridat primo do konfigu do parameters?
A pak v komponente k tomu pristupovat takto$fileDir = $this->presenter->getContext()->parameters['obrazky'];
Vytáhnout si to z contextu můžeš ale neni to moc čistý
Updatoval sem předešlej post a přidal ukázku.
Editoval EIFEL (27. 1. 2014 12:05)
- Pavel Macháň
- Člen | 282
konva napsal(a):
a do sablony si to teda vzdycky musim predavat jako promennou?
Do šablony si to pak dáš klasicky
// treba v presenteru
$this->template->imageDirectories = $this->imageDirectories
a v šabloně budeš volat
<img src="{$imageDirectories->getThumbnail()}/obrazek.jpg">
pokud bys využil v ImageDirectories Nette\Object tak by si to mohl zjednodušit na
<img src="{$imageDirectories->thumbnail}/obrazek.jpg">
- n.u.r.v.
- Člen | 485
EIFEL napsal(a):
konva napsal(a):
no to by slo. A co to pridat primo do konfigu do parameters?
A pak v komponente k tomu pristupovat takto$fileDir = $this->presenter->getContext()->parameters['obrazky'];
Vytáhnout si to z contextu můžeš ale neni to moc čistý
Updatoval sem předešlej post a přidal ukázku.
Ahoj, dotaz – proč $this->context->parameters není čisté? Mám takto hodně konstant v configu a takto je v presenterech používám…
Např. mám v configu nadefinováno max. délku jména a příjmení: nameMaxLength:25 a surnameMaxLength:25
a pak např. v presenterech mám v továrničce pro formulář
pravidlo:
->addRule(Form::MAX_LENGTH, ‚Jméno může obsahovat maximálně %d
znaků‘, intval($this->context->parameters[„nameMaxLength“]));
To je špatně?
- Pavel Macháň
- Člen | 282
n.u.r.v. napsal(a):
EIFEL napsal(a):
konva napsal(a):
no to by slo. A co to pridat primo do konfigu do parameters?
A pak v komponente k tomu pristupovat takto$fileDir = $this->presenter->getContext()->parameters['obrazky'];
Vytáhnout si to z contextu můžeš ale neni to moc čistý
Updatoval sem předešlej post a přidal ukázku.
Ahoj, dotaz – proč $this->context->parameters není čisté? Mám takto hodně konstant v configu a takto je v presenterech používám…
Např. mám v configu nadefinováno max. délku jména a příjmení: nameMaxLength:25 a surnameMaxLength:25
a pak např. v presenterech mám v továrničce pro formulář pravidlo:
->addRule(Form::MAX_LENGTH, ‚Jméno může obsahovat maximálně %d znaků‘, intval($this->context->parameters[„nameMaxLength“]));To je špatně?
Je to jako tahat zajíce z klobouku. Naplnil jsem ten klobou? Je tam opravu ten zajíc? Co když už chcípnul?
Takhle pokud zapomeneš v configu definovat nameMaxLength tak ti to zařve s exception, že přistupuješ do pole na neexistující klíč. A neustále v každé části kde nameMaxLength využiješ kontrolovat jestli klíč opravdu existuje je dost šílené. Takhle si to můžeš ošetřit prímo ve službě (třeba v get metode), jestli si to opravdu naplnil a případně si tam dát i svoji LogicException.
Taky budeš vědět, že to opravdu dostaneš, protože si injecneš přesně to co potřebuješ. Nebudeš šátrat do contextu a doufat, že to tam je.
Editoval EIFEL (27. 1. 2014 13:55)