Autor Zpráva
qteck
Profil
Ahoj,

pročetl jsem si tady pár topiců na stejné téma, ale problém jsem nevyřešil.

Laděnka mi hlásí: "cannot redeclare class PageMannager"

Vytvořil jsem si třídu na správu stránek kterou mám v model/defautl.php
( https://github.com/qteck/evelinkars/blob/master/model/default.php )

class PageMannager {}

tento model/defautl.php includuju pomocí require_once do indexu.
( https://github.com/qteck/evelinkars/blob/master/index.php )

require_once('model/defautl.php'); a volám pod tím

$pages = new Model\PageMannager;
$pages->modelIncluder();


Nedaří se mi to vyřešit,
děkuji za pomoc.
aDAm
Profil
Nepřipojuj tu třídu vícekrat než jednou.
qteck
Profil
ale jak to tedy vyřešit? nejsem si vědom že bych to někde dělal.


navíc teď jsem mrkl jak je vyřešená tracy a includuju to tam stejným způsobem jako to dělá grudl.

tak nevím v čem to vězí, nemohl by někdo kouknout na ty odkazy na githubu co jsem poslal.


oh my good, už vim, tam mám v té jedné větvi double include. jsem ho úplně vypustil. Díky.
Jan Tvrdík
Profil
qteck:
OT: Mannager je překlep nebo úmyslný neologismus?


Proč vlastně nepoužíváš autoloader z Composeru a načítáš to všechno ručně?
qteck
Profil
Jan Tvrdík:
Naneštěstí jen prostá hloupost.

Jsem v těchto oblastech celkem čerstvej, můžeš mi to trochu vysvětlit, jak to funguje?

Našel jsem v composeru soubor autoload_files.php. ten obsahuje řádek:

return array(
    $vendorDir . '/tracy/tracy/src/shortcuts.php',
);

myl bych sem naházet i ty ostatní odkazy na autoload facebooku a ostatních api? a pak includnout jenom composer?

Díky


okay teď jsem naše v composeru autoload.

teď vidím, že jediné co bych měl udělat je pouze:
vendor/autoload.php

tak to je super :-)


tvl to je fakt paráda :-)...!!


díky!
aDAm
Profil
od toho ten composer je....usnadnit práci s knihovnama, závislostma atd.
Keeehi
Profil
qteck:
Pro automatické načítání tříd z knihoven nainstalovaných pomocí composeru je soubor vendor/autoload.php. To je jediné, co se musí includovat ručně (velmi často na začátku bootstrap.php). Ovšem composer nenačítá tebou vytvořené třídy ve tvém projektu. A proto má nette RobotLoader, který se o načítání tříd tvého projektu stará. doc.nette.org/cs/2.2/auto-loading
Jan Tvrdík
Profil
Keeehi:
Ovšem composer nenačítá tebou vytvořené třídy ve tvém projektu.
To není úplně pravda, v souboru composer.json příslušící tvému projektu můžeš definovat i autoloading pro ten projekt. Rozdíl oproti RobotLoaderu je v tom, že pokud nepoužíváš PSR-1 nebo PSR-4, ale používáš obecnou classmap, tak při každém přidání nebo přesunu libovolné třídy musíš ručně zavolat composer dump-autoload, aby Composer classmapu přegenerovat. RobotLoader tohle přegenerování umí řešit automaticky.
Keeehi
Profil
Jan Tvrdík:
OK, to jsem nevěděl. Tušil jsem, že by to tam někde mohlo být ale jelikož existuje RobotLoader, tak jsem to nikdy nemusel řešit. Rozdíl mezi nimi je, že RobotLoader navíc pokaždé kontroluje, zda se něco nezměnilo a pokud ne, tak použije verzi z keše. Je to tak? Na produkčním servru se mi však soubory nemění, takže si myslím, že by mělo být z hlediska výkonu lepší použít composerem staticky vygenerovaný autoload. Měla by tam odpoadat ta kontrola změn. Vůbec netuším, jak RobotLoader kontroluje zda nedošlo k nějaké změně, ale předpokládám že nějak elegantně a rychle. Pokud bych tedy přešel z RobotLoaderu na composer autoload, bude zlepšení vůbec měřitelné?
Jan Tvrdík
Profil
Keeehi:
Rozdíl mezi nimi je, že RobotLoader navíc pokaždé kontroluje, zda se něco nezměnilo
RobotLoader kontroluje změny jen pokud je zapnut $autoRebuild, což je obvykle pouze ve vývojovém prostředí.

z hlediska výkonu lepší použít composerem staticky vygenerovaný autoload
Ano, ale ne proto, že by RobotLoader kontrolovat změny, ale protože je ideální mít pouze jeden zapnutý autoloader.

Vůbec netuším, jak RobotLoader kontroluje zda nedošlo k nějaké změně, ale předpokládám že nějak elegantně a rychle.
Moc rychle to bohužel udělat nejde, proto se to na produkčním serveru nedělá.

Pokud bych tedy přešel z RobotLoaderu na composer autoload, bude zlepšení vůbec měřitelné?
Pokud máš na produkčním serveru vypnutý autoRebuild, tak ten rozdíl nebude výrazný. Ale nějakého drobné zlepšení se asi dočkáš.
Keeehi
Profil
Jan Tvrdík:
Úplně vyčerpávající odpověď. Díky za info.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: