Definice konstanty se slozkou pro obrazky

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

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
+
0
-

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)

konva
Člen | 88
+
0
-

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'];
Pavel Macháň
Člen | 282
+
0
-

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)

konva
Člen | 88
+
0
-

a do sablony si to teda vzdycky musim predavat jako promennou?

Pavel Macháň
Člen | 282
+
0
-

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">
konva
Člen | 88
+
0
-

to vypada dobre. Upravim si to tak.
Diky

n.u.r.v.
Člen | 485
+
0
-

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
+
0
-

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)