Nette\Loaders – subor sa nenasiel
- piler
- Člen | 111
Snazim sa implementovat SimpeLoader() pre svoj projekt a nejak mi to nechce fungovat.
<?php
$loader = new SimpleLoader();
$loader->register();
?>
Hned potom mi vyhodi hlasku:
AutoLoader::include_once(User.php) [autoloader.include-once]: failed to open stream: No such file or directory
#113 -/.../libs/local_libs/nette/Loaders/AutoLoader.php
Snazil som sa najst nieco v dokumentacii, alebo na fore, ale to bolo iba k RobotLoader.
Dik za pomoc
- pmg
- Člen | 372
SimpleLoader
vnitřně používá AutoLoader
, ale
název souboru s třídou / rozhraním odvodí přímo od jejich názvu
(prostuduj soubor /Loaders/SimpleLoader.php
). Možná by pomohlo
nastavit si v config.ini include_path na adresář se souborem
User.php
a jiné cesty, ze kterých je potřeba něco
načítat.
set.include_path = "%appDir%;%libsDir%;/další/cesta"
Nebo se dá také použít PHP funkce set_include_path
.
Nebál bych se ale používat RobotLoader
, všechno ti sám
najde a můžeš si umístit soubor, kam chceš.
- piler
- Člen | 111
pmg napsal(a):
SimpleLoader
vnitřně používáAutoLoader
, ale název souboru s třídou / rozhraním odvodí přímo od jejich názvu (prostuduj soubor/Loaders/SimpleLoader.php
). Možná by pomohlo nastavit si v config.ini include_path na adresář se souboremUser.php
a jiné cesty, ze kterých je potřeba něco načítat.
set.include_path = "%appDir%;%libsDir%;/další/cesta"
Nebo se dá také použít PHP funkce
set_include_path
.Nebál bych se ale používat
RobotLoader
, všechno ti sám najde a můžeš si umístit soubor, kam chceš.
Nepouzivam cele Nette. Iba niektore triedy. nastavil som set_include_path(). Stale sa snazil hladat User.php, ale moj subor sa vola lib.User.php..ked som odstranil to lib. tak to fungovalo, ale natrafil som na dalsi problem ked tam bol podadresar smarty :(. Ked robim instaciu napr new User(), tak subor obsahuje v nazve User. Podobne je to aj s ostatnymi triedami.
Da sa to nejak nakonfigurovat, resp. aby sam preliezol adresare? Vyzera to ako velmi dobra pomocka.
- pmg
- Člen | 372
To je právě chování, které nabízí RobotLoader
. Takhle se
používá:
$loader = new RobotLoader();
$loader->addDirectory('/adresář/aplikace');
$loader->autoRebuild = TRUE;
$loader->register();
Proskenuje soubory a cesty si kešuje. Je úplně jedno, v jakém podadresáři soubor s třídou je a jak se jmenuje.
- piler
- Člen | 111
pmg napsal(a):
To je právě chování, které nabízí
RobotLoader
. Takhle se používá:$loader = new RobotLoader(); $loader->addDirectory('/adresář/aplikace'); $loader->autoRebuild = TRUE; $loader->register();
Proskenuje soubory a cesty si kešuje. Je úplně jedno, v jakém podadresáři soubor s třídou je a jak se jmenuje.
To som skusal, ale narazil som na ten problem, ze nepouzivam nette. Chyba mu napr. Enviroment. Takze nie je moznost vyuzit tuto triedu, pokial nepouzijem cely framework?
- pmg
- Člen | 372
Já jsem právě myslel, že tam ty ostatní soubory máš (třeba ten
AutoLoader
, který oba dědí). Pokud tam ale nakopíruješ celé
Nette, načtou se jen soubory, které jsou potřeba (to je zas NetteLoader).
Začni tím, že includuješ soubor /Nette/loader.php, pak by to
mělo jít.
Ke druhému dotazu. Nemusí to tam být, je to kvůli rychlosti.
Editoval pmg (5. 12. 2008 17:49)
- piler
- Člen | 111
pmg napsal(a):
Já jsem právě myslel, že tam ty ostatní soubory máš (třeba ten
AutoLoader
, který oba dědí). Pokud tam ale nakopíruješ celé Nette, načtou se jen soubory, které jsou potřeba (to je zas NetteLoader). Začni tím, že includuješ soubor /Nette/loader.php, pak by to mělo jít.Ke druhému dotazu. Nemusí to tam být, je to kvůli rychlosti.
Tie subory ktore oba zdedili, samozrejme mam. Ale potom uz nefungovalo includovanie mojich suborov.
Skusil som teda naincludovat loader.php…prebehlo bez problemov, ale co dalej?
- pmg
- Člen | 372
Skusil som teda naincludovat loader.php…prebehlo bez problemov, ale co dalej?
Soubor ti načte NetteLoader, který ti pak bude načítat všechny soubory z Nette tak, jak bude potřeba. Za include přidej inicializaci RobotLoaderu a potom jakýkoliv jiný kód, dále už nemusíš používat include.
Koukni třeba sem. Knihovnu dibi už není potřeba includovat.
- piler
- Člen | 111
pmg napsal(a):
Skusil som teda naincludovat loader.php…prebehlo bez problemov, ale co dalej?
Soubor ti načte NetteLoader, který ti pak bude načítat všechny soubory z Nette tak, jak bude potřeba. Za include přidej inicializaci RobotLoaderu a potom jakýkoliv jiný kód, dále už nemusíš používat include.
Koukni třeba sem. Knihovnu dibi už není potřeba includovat.
Pridal som za config.php
<?php
$robot = new RobotLoader();
$robot->addDirectory(LOCAL_LIBS_PATH);
$robot->register();
?>
ale vyhodilo mi to error
Unknown error type: [2]
AutoLoader::include_once(/.../local_libs/nette/Web/User.php) [autoloader.include-once]: failed to open stream: No such file or directory
#113 -/.../local_libs/nette/Loaders/AutoLoader.php
---/
Hlada to na nespravnom mieste.