Nette\Loaders – subor sa nenasiel

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

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

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

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 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š.

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

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

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?

piler
Člen | 111
+
0
-

Pozeram si akurat priklad Acrabat a niekto Presentery maju na zaciatku require. Ako je to vlastne s tym RobotLoader? Je to dobre pouzit len na urcite subory? Mal som pocit, ze ak raz pouzijem RobotLoader, tak sa uz o cesty k suborom nemusim starat.

pmg
Člen | 372
+
0
-

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

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

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

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.