cizí knihovny
- rokerkony
- Člen | 122
v bootstrapu by meli byt tyto radky
// enable RobotLoader - this allows load all classes automatically
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR); // nahraje vsechny classy z app slozky
$loader->addDirectory(LIBS_DIR); // nahraje vsechny classy z libs slozky
$loader->register();
pak cokoli je v APP_DIR a LIBS_DIR je automaticky nacteno…
- kravčo
- Člen | 721
Oggy napsal(a):
samozřejmě robotloader používám.. a cestu k dibi jsem pomocí require nenačítal.. proto mi přišlo zvláštní, že dibi najde a zend ne..
NetteLoader a RobotLoader sú rozdielne loadery… V prípade, že máš
RobotLoader nastavený na adresár s knižnicami (napríklad
/libs
), načíta ti automaticky všetko z tohto adresára.
Ještě: v některých examples je použit např. new Zend_Mail() ..přestože v adresářové struktuře by to mělo znamennat Zend/Mail ..?
Ak sú medzi knižnicami (v adresári /libs
) i triedy Zendu,
načíta ich tiež a nezáleží, že používajú mennú konvenciu –
RobotLoader ju nevyžaduje.
- kravčo
- Člen | 721
Oggy napsal(a):
a mohl bych poprosit ještě o dovysvětlení.. toho podtržítka?.Zend_Mail.. on hledá ve složce Zend adresář Mail?
kravco napsal(a):
V prípade, že máš RobotLoader nastavený na adresár s knižnicami (napríklad
/libs
), načíta ti automaticky všetko z tohto adresára.
Je úplne jedno, kde je trieda umiestnená v rámci adresára s knižnicami, podstatné je, aby sa volala „Zend_Mail“.
- Oggy
- Člen | 306
ne ne.. volam Zend_Mail.. jen jsem myslel, že loader.. hledá podle názvu třídy stejnou složku..
index.php
<?php
// absolute filesystem path to the libraries
define('LIBS_DIR', WWW_DIR . '/../libs');
?>
bootstrap.php
<?php
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->addDirectory(LIBS_DIR);
$loader->register();
?>
AuthPresenter
<?php
private function passwordSend($adresa,$jmeno)
{
$email = $this->createTemplate();
$email->setFile(Environment::expand('%templatesDir%/emails/new-password.phtml'));
$email->name = $name; // naplníme nějaká data
$email->headers = (object) NULL;
$body = (string) $email; // vyrenderujeme šablonu už nyní
$mailer = new Zend_Mail('UTF-8');
$mailer->setBodyText($body);
$mailer->setFrom($email->headers->from);
$mailer->addTo($adresa, $jmeno);
$mailer->setSubject($email->headers->subject);
$mailer->send();
}
?>
Editoval Oggy (31. 5. 2009 21:44)
- Oggy
- Člen | 306
Solved..jsem vosel.. nakopíroval jsem si složku Zend do libs s domněním, že je to knihovna Zendu.. ale měl tu ještě složku Zend, ve které jsem měl některé projekty.. takže moje banální chyba, která se hledá těžko :-)
jinak k úspěšnému požití Zend_Mail je opravdu třeba:
>
set_include_path(implode(PATH_SEPARATOR, array( LIBS_DIR, get_include_path() )));
- Panda
- Člen | 569
Problém je sice již vyřešen, nicméně padaly zde nějaké dohady
ohledně skutečné funkce RobotLoader
u, tak se je pokusím uvést
na pravou míru.
RobotLoader
, jak již název napovídá, při prvním běhu
aplikace proběhne všechny složky, které jsou mu podstrčeny metodou
RobotLoader::addDirectory()
. Ve složkách hledá PHP scripty a
sestavuje si seznam, ve kterém souboru jsou jaké třídy a jaké jsou jejich
závislosti (interface, dědičnost). Tento seznam si pro zvýšení výkonu
uloží do cache a pak se jím podle potřeby řídí.
Důležité je to, že RobotLoader
u je v podstatě jedno,
v jaké složce a v jakém souboru jaká třída sídlí, on si vše najde
sám (samozřejmě pokud je mu poskytnuta správná cesta v
RobotLoader::addDirectory()
).
Nutno také podotknout, že RobotLoader
je slušně vychovaný a
zohledňuje soubor netterobots.txt
, který mu říká, jaké
podsložky má vynechat. Tohoto souboru je využito u dibi, které je
přizpůsobeno k použití bez Nette a obsahuje některé součásti jeho
součásti (konkrétně rozhraní IDebuggable
), které by
způsobovaly kolize
(InvalidStateException("Ambiguous class '$class' resolution ...");
),
a includes driverů si obstarává samo, tak není potřeba je projíždět
RobotLoader
em:
Disallow: /drivers
Disallow: /Nette