Autor | Zpráva | ||
---|---|---|---|
qteck Profil |
#1 · Zasláno: 4. 2. 2015, 11:11:10
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 |
#3 · Zasláno: 4. 2. 2015, 11:28:55 · Upravil/a: qteck
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 |
#5 · Zasláno: 4. 2. 2015, 12:20:35 · Upravil/a: qteck
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 |
#6 · Zasláno: 4. 2. 2015, 13:36:32
od toho ten composer je....usnadnit práci s knihovnama, závislostma atd.
|
||
Keeehi Profil |
#7 · Zasláno: 4. 2. 2015, 19:12:34
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 |
#9 · Zasláno: 4. 2. 2015, 21:03:28
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 |
#11 · Zasláno: 4. 2. 2015, 21:27:50
Jan Tvrdík:
Úplně vyčerpávající odpověď. Díky za info. |
||
Časová prodleva: 9 let
|
0