Citat:
masinac_1: Ajd da te zamolim kada nadjes vremena (ili neko drugi, svejedno) da napises koji red o tome kako si postavio modele i forms u odgovarajuci folder modula.
Pa ja mislim da smo tu priču već evaluirali sa onim resources.modules[] = '' u app.ini i Zend_Application_Module_Bootstrap klasom...
Citat:
masinac_1: Hteo bih jos i layout da imam posebno za svaki model.
E pa za tako nešto ćeš ipak trebati malo da se pomučiš...

Najpre treba da kažeš ZF-u da u svojoj aplikaciji želiš da koristiš Zend_Layout komponentu. To možeš da uradiš na više načina, a najlogičniji bi bio da iskoristiš app resurs za inicijalizovanje layout-a (Zend_Application_Resource_Layout):
Code:
resource.layout.layoutPath = 'putanja/do/layout/foldera';
resource.layout.layout = 'layout.phtm';
... ili da ručno u tvojoj glavnoj Bootstrap klasi dodaš metod koji će da radi praktično istu stvar, npr.:
Code:
protected function _initLayout()
{
Zend_Layout::startMvc('putanja/do/layout/foldera')->setLayout('layout.phtml');
}
Nadam se da znaš kakva bi trebala da bude struktura tog layout.phtml fajla, a i uostalom, sve lepo piše u manual-u.
E sad, da bi neki od dodatnih modula mogao da koristi svoj layout za ispis, rešenje nikako nije da ovo isto uradiš u Bootstrap klasi tog nekog modula, jer bi tako samo overwrite-ova ovo što si uradio u default modulu, i taj layout bi onda bio "na snazi". To switch-ovanje layout-a moraš da uradiš u odnosu na zahtev (request), tačnije, kada je request set-ovan na taj neki dodatni modul. Najbolji način za realizaciju ovoga je koristeći
Front Controller Plugin-ove. Oni ti omogućavaju da "slušaš" određene doagđaje koji se izvršavaju u jednom ciklusu Front Controller-a, odnosno tog celog dispatch cikluca. Postoji nekoliko tih tkz. kuka (hooks), i to:
routeStartup,
routeShutdown,
dispatchLoopStartup,
preDispatch,
postDispatch i
dispatchLoopShutdown. Ono što ti treba da uradiš je da napraviš svoj plugin, koji će se izvoditi iz
Zend_Controller_Plugin_Abstract klase, u kojoj imaš sve ove hook-ove u vidu metoda spremnih za redefinisanje.

Primetićeš da ta klasa kao članove ima $_request i $_response objekte (to je ona priča o korišćenju jednog objekta na više mesta

), a i svi ti hook metodi kao argument dobijaju instancu Zend_Controller_Request_Abstract klase. Ti ćeš u tvom plugin-u iskoristiti taj objekat, kako bi ispitao da li je trenutno zahtevan taj tvoj modul sa custom layout-om, i ako jeste promenićeš putanju layout foldera. Taj plugin bi izgledao npr. ovako:
Code:
class Admin_Plugin_LayoutInit extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
if ($request->getModuleName() == 'admin') { //Admin modul? Menjamo layout.
$layoutPath = 'putanja/do/admin/layout/foldera';
Zend_Layout::getMvcInstance()->setLayoutPath($layoutPath);
}
}
}
Kao što, vidiš jako jednostavno...
Citat:
masinac_1: Ajd jos samo ovo, kako da poboljsam javljanje gresaka, da mi preciznije kaze u cemu je problem?
Kad god u tvojoj aplikaciji dođe do nekog izuzetka, ZF će to po default-u pokušati da forward-uje na kontroler sa nazivom "Error" i njegovu akciju koja se zove "error". Ti taj kontroler (verovatno) nemaš, pa ćeš možda često dobijati poruku "Invalid controller specified 'erro'r", ili tako nešto. Rešenje - napravi taj kontroler i u njemu handle-uj izuzetke. Više o svemu tome imaš ovde:
http://framework.zend.com/manu...end.controller.exceptions.html
http://codeutopia.net/blog/200...ling-errors-in-zend-framework/
Citat:
masinac_1: Za index akciju u guestbook kontroleru se poziva fetchAll() iz guestbook mapera. Pa onda on izvrti dve svoje metode getDbTable() i setDbTable($dbTable) (?!). Ime jedva nadje u DbTable_Guestbook pa onda preko Model_Guestbook slaze ono sto je pokupio iz baze.
Moze li ovo prostije?
Gledaj, nije poenta da ti radiš sve kako "oni" kažu.

Oni su u tom tutorijalu pokušali da simuliraju ORM, ali to ne znači da i ti u svom projektu moraš da radiš na taj način. Zend_Db_Table klasa je sama po sebi jako moćna stvar. Izvedi neku tvoju klasu iz nje, redefiniši promenljivu $_name (ime tvoje tabele u bazi), i imaš potpuno funkcionalan Table Gateway ka tvojoj db tabeli, kroz metode find(), insert(), update(), delete(), fetchAll(), fetchRow().
A i druga stvar, niko te ne prisiljava da ti koristiš npr. Zend_Db_Select, jer ti tvoje upite možeš da izvršavaš tako što ćeš string upita proslediti direktno npr. fetchAll() metodu tvog db adaptera (instanca Zend_Db_Adapter klase). Zbog svega toga, Zend je jako fleksibilan i moćan framework.