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 RobotLoaderu, 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 RobotLoaderu 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
RobotLoaderem:
Disallow: /drivers
Disallow: /Nette