FTP deployment – Fatal error

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

Ahoj,

zkouším nástroj FTP deployment, ale mám s ním menší problém. Nastavil deployment.ini a když spustím deploy, připojí se na server, zahlásí, že nenašel .htdeployment a začne vypisovat ignorované soubory. Následně ale přijde následující hláška:

Fatal error: Using $this when not in object context in /tools/Deployment/libs/Preprocessor.php on line 78

na řádku 78 se rekurzivně volá

$s = $this->expandCssImports($s, $file);

Pokud v deployment.php zakomentuji řádek č. 82 –

$deployment->addFilter('css', array($preprocessor, 'expandCssImports'));

vše funguje.

Dokáže někdo poradit?

motorcb
Člen | 552
+
0
-

Hoď bližší info o jakej FTP deployment se jedná…

Tomáš Kolinger
Člen | 136
+
0
-

motorcb napsal(a):

Hoď bližší info o jakej FTP deployment se jedná…

https://github.com/…p-deployment

enumag
Člen | 2118
+
0
-

Je to psané pro PHP 5.4. Nevím proč to autor nedal do requirements když už se nestaral o kompatibilitu.

mkoubik
Člen | 728
+
0
-

Navíc používání $this v anonmymní funkci je fail, bez ohledu na to, že to daná verze PHP umožňuje.

enumag
Člen | 2118
+
0
-

@mkoubik: Proč myslíš? Připadá mi to mnohem lepší než obvyklé $_this = $this; fucntion (...) use ($_this).

MartinitCZ
Člen | 580
+
0
-

@**enumag**: Autorem je David Grudl :)
@**mkoubik**: Nevidim žádný důvod proč by to mělo být špatně. Závisí na verzi PHP a pokud je to tvořeno pouze pro poslední verzi, tak je snad vše OK :)

mkoubik
Člen | 728
+
0
-

@enumag
To co jsi napsal je samozřejmě ještě horší :-) a ten syntax sugar v 5.4 nahrazuje přesně tohle. Nicméně anonymní třída by měla být pokud možno bezstavová – vezme vstup a vrátí výstup (deterministicky/nedeterministicky – to je jedno), nic víc. Pokud potřebuje pracovat s nějakým stavem (byť je to třeba $this v aktuálním kontextu), tak se předá přes use a tím je jasně vidět na čem ta closure závisí.
Tady bych konkrétně použil use ($preprocessor) a uvnitř closury $preprocessor->expandCssImports(...)
Pokud bychom ji totiž třeba uložili do proměnné a poslali do jiného objektu, tak bude $this matoucí – referuje stav objektu, ve kterém closura vznikla a se kterým je jaksi tajemně propojena, ale tváří se to jako vnitřní stav té closury.
Asi jsem to nenapsal moc srozumitelně, ale nechce se mi to rozebírat podrobně – jsme tady off topic.

Editoval mkoubik (24. 11. 2012 16:35)

enumag
Člen | 2118
+
0
-

@martinit: Všiml jsem si. A co jako? :-) Stějně to měl uvést v composer.json.

@mkoubik: Souhlasím s tím, že je nesmysl to $this používat pokud tu closure předávám jinam. Pokud ji ale mám jen napsanou na místě jako callback pro volanou funkci (což je tento případ) tak mi použití $this připadá v pořádku.

Filip Procházka
Moderator | 4668
+
0
-

To jako to má David napsané je naprosto v pořádku. Nechápu co tady řešíte.

@Maxell92 ty si aktualizuj PHP na localhostu

@mkoubik a ty pošli pullrequest, aby to fungovalo i na 5.3 ;)

enumag
Člen | 2118
+
0
-

@HosipLan: Řešíme, že tam má závislost na PHP 5.4 a nemá ji uvedenou v composer.json. ;-)

mkoubik
Člen | 728
+
0
-