login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[ZF] Modulair systeem bouwen

Offline juul - 30/09/2007 11:55
Avatar van juulHTML interesse Hallo,

Ik ben dus begonnen met Zend Framework en ik wil dus een cms bouwen en het leek me dan handig om de volgede structuur te gebruiken:

./application
--./default
----./controllers
--./forum
----./controllers

Maar ik snap het niet echt helemaal mijn globale template files moet ik die dan per module er bij gaan plaatsen ook al zijn ze het zelfde?

26 antwoorden

Gesponsorde links
Offline Wim - 30/09/2007 14:03 (laatste wijziging 30/09/2007 14:05)
Avatar van Wim Crew algemeen
  1. ./application
  2. ./controllers
  3. ./models
  4. ./views
  5. ./helpers
  6. ./filters
  7. ./scripts
  8. ./library
  9. ./Zend
  10. ./public
  11. ./styles
  12. ./javascripts
  13. ./media
  14. ./images
  15. ./flash


dat moet je structuur zijn.

Je template files (phtml) zet je in de map views/<controller>/<action>
Offline juul - 30/09/2007 14:12
Avatar van juul HTML interesse http://framewor...dular.html

 
Offline Ibrahim - 30/09/2007 14:31
Avatar van Ibrahim PHP expert
  1. ./application
  2. ./controllers
  3. ./models
  4. ./views
  5. ./helpers
  6. ./filters
  7. ./scripts
  8. ./modules
  9. ./module1
  10. ./controllers
  11. ./models
  12. ./views
  13. ./library
  14. ./Zend
  15. ./public
  16. ./styles
  17. ./javascripts
  18. ./media
  19. ./images
  20. ./flash


dit moet je structuur zijn
Offline juul - 30/09/2007 15:15 (laatste wijziging 30/09/2007 15:23)
Avatar van juul HTML interesse En kan je daar ook iets meer uitleg bij geven? Die map module1 is dus gewoon een module met controllers etc en dan in die andere zitten gewoon standaard controllers?

En kan iemand mij ook uitleggen hoe ik een systeem maak voor verscheidene templates want nu moet dat altijd in de map views en das nogal onhandig.  

Edit: kan je ook even zeggen wat ik in bootstrap moet zetten  
Offline Ibrahim - 30/09/2007 15:58
Avatar van Ibrahim PHP expert Een applicatie kan 1 module hebben, daarvoor hoef je geen modules map aan te maken. Die module maak je dan gewoon in de standaard mappen. Maar soms wilt men meerdere modules. Die zet je dan in de modules map, per module zal er dan een map worden gemaakt.

In de map /application/controllers/ kun je ook controllers plaatsen. Die hoeven dan in de url geen module naam ervoor te hebben.

URL met routing naar een module is dan: /<module>/<controller>/<action>
URL met routing naar een controller zonder een module
/<controller>/<action>


Over je meerdere templates probleem:

http://framework.zend.com/manual/en/zend.view.html

Lees dat eens, ik ga niet alles voorkauwen 

Wat betreft je bootstrap, misschien moet je ook maar eens stijn's tutorial reeks van ZF lezen.
Offline juul - 30/09/2007 18:14 (laatste wijziging 30/09/2007 18:22)
Avatar van juul HTML interesse Bedankt ik vraag je trouwens toch niet om alles voor te kouwen maar ik dacht dat er misschien iets speciaals in de bootstrap moest maar blijkbaar niet dus.

En bedankt voor dat van die manual dat had ik niet zien staan  

Edit: en ik krijg een error namelijk:
Citaat:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in pathlibraryZendControllerDispatcherStandard.php:194 Stack trace: #0 pathlibraryZendControllerFront.php(920): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 pathindex.php(21): Zend_Controller_Front->dispatch() #2 {main} thrown in pathlibraryZendControllerDispatcherStandard.php on line 194


En van dat template systeem vindt ik trouwens toch niet wat ik zocht ik zie nergens iets om verschillende templates te hebben dus dat de user de hele layout kan veranderen enzo.
Offline meagain - 30/09/2007 19:40
Avatar van meagain Nieuw lid Doorbijten wanneer je met het ZF begint is de boodschap.

Ben er ook al een tijdje mee bezig; echt makkelijk is het niet!!

Lees hier http://www.site...p;id=24567 de laatste toevoeging eens. Misschien dat het je verder helpt.

btw
Citaat:
ik wil dus een cms bouwen


Heb je al eens naar Joomla gekeken? Een volledig gratis volwassen cms gebaseerd op PHP en mySql !!
Offline juul - 05/10/2007 21:12
Avatar van juul HTML interesse
  1. <?php
  2. // PHP settings
  3. set_include_path( '.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . get_include_path() );
  4.  
  5. // Includes
  6. include_once('Zend/Loader.php');
  7. include_once 'Zend/Controller/Front.php';
  8.  
  9. // Configuration
  10. Zend_Loader::loadClass('Zend_Controller_Front');
  11.  
  12. $front = Zend_Controller_Front::getInstance();
  13.  
  14. $front->setBaseUrl('/zend_test');
  15. $front->setParam('noViewRenderer' , true);
  16. $front->dispatch();


Dat is nu mijn bootstrap maar het werkt niet ik krijg echt bij alles deze error:
Citaat:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:wampwwwzend_testlibraryZendControllerDispatcherStandard.php:194 Stack trace: #0 C:wampwwwzend_testlibraryZendControllerFront.php(920): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:wampwwwzend_testindex.php(17): Zend_Controller_Front->dispatch() #2 {main} thrown in C:wampwwwzend_testlibraryZendControllerDispatcherStandard.php on line 194
Offline Stijn - 05/10/2007 23:04
Avatar van Stijn PHP expert Regel 8 mag je weg doen (zend_loader include hem al)

Je moet een default controller opgeven 

Geef ook eens je structuur (screenshot van map structuur is goed) en de inhoud van controllers.
Offline marten - 06/10/2007 06:07
Avatar van marten Beheerder
Citaat:
inhoud van controllers.

Op plaatscode dan natuurlijk he als het meer dan 70 regels is 
Offline juul - 12/10/2007 17:48
Avatar van juul HTML interesse Oke dit is nu mijn bootstrap:
  1. <?php
  2. // PHP settings
  3. set_include_path( '.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . get_include_path() );
  4.  
  5. // Includes
  6. include_once('Zend/Loader.php');
  7.  
  8. // Configuration
  9. Zend_Loader::loadClass('Zend_Controller_Front');
  10.  
  11. $front = Zend_Controller_Front::getInstance();
  12. $front->setBaseUrl('/zend_test');
  13. $front->addModuleDirectory('application/');
  14. $front->setParam('noViewRenderer' , true);
  15. $front->dispatch();


En ik heb deze map structuur genomen:
Citaat:
application/
default/
controllers/
module_1/
controllers/
module_2/
controllers/


Nu werkt de url:
http://127.0.0.1/default (en ook naar verschillende controllers en actions m.a.w. alles perfect)

maar nu werkt alleen
http://127.0.0.1/module_1/index
nog niet (moest die "_1" een probleem zijn mijn module noemt zo niet dus dat is het probleem niet) en ik krijg deze error:

Citaat:
Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in websitelibraryZendControllerDispatcherStandard.php:194 Stack trace: #0 websitelibraryZendControllerFront.php(920): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 websiteindex.php(16): Zend_Controller_Front->dispatch() #2 {main} thrown in websitelibraryZendControllerDispatcherStandard.php on line 194
Offline Button - 12/10/2007 19:35 (laatste wijziging 12/10/2007 19:43)
Avatar van Button PHP ver gevorderde heb ook vraagje:

  1. ./application
  2. ./controllers
  3. ./models
  4. ./views
  5. ./helpers
  6. ./filters
  7. ./scripts
  8. ./modules
  9. ./module1
  10. ./controllers
  11. ./models
  12. ./views
  13. ./library
  14. ./Zend
  15. ./public
  16. ./styles
  17. ./javascripts
  18. ./media
  19. ./images
  20. ./flash


wat moet er dan zo'n in 'module' komen? wat houdt die module in? Is dat een compleet nieuw mvcpatternsysteem? Of zijn dat slechts enkele onderdelen, dus bv. als je een forum wil, dan zet je in die module alle controllers, view, models voor het forum en als je dan in je hoofdmvcpattern je forum wilt inladen, dan link je naar die module bv. je wil een controller gebruiken uit die module: bv. <moduleForum><controllerForumReacties>

[srry dat ik me moei, maar dat vroeg ik me af wanneer ik dit topic las]
Offline Stijn - 12/10/2007 20:00
Avatar van Stijn PHP expert Zet boven $front->addModuleDirectory('application/'); eens volgende:

  1. $front->setControllerDirectory('application/default/controllers/');


Als dit niet helpt dan moet je eens try{ catch() } zetten rond de $front code.

@button:
Stel dat je een website wilt maken zoals sitemasters dan zal je met modules werken. Een module nieuws , account , ...

Een kleine website heeft geen modulair systeem nodig. Kleine websites zijn persoonlijke websites en bedrijfswebsites.
Offline juul - 13/10/2007 09:27
Avatar van juul HTML interesse Bedankt stijn maar het werkt nog niet spijtig genoeg had het ook wel een beetje verwacht want zo zet je de controller directory voor alle modules naar de controller directory van de default module  als ik me niet vergis?

Ik heb even gezocht in de ZF manual maar hoe vraag ik de errors van het framework op?
Offline marten - 13/10/2007 10:18
Avatar van marten Beheerder http://www.goog...gle+zoeken

Kijk daar eens wat een mooie zoekopdracht 
Offline juul - 13/10/2007 12:01 (laatste wijziging 13/10/2007 12:23)
Avatar van juul HTML interesse Error:
Citaat:
Invalid controller class ("Content_IndexController")


Code van application/content/controllers/IndexController.php:
  1. <?php
  2. class IndexController extends Zend_Controller_Action
  3. {
  4. public function indexAction()
  5. {
  6. echo "test";
  7. }
  8. }


Bootstrap:
  1. <?php
  2. // PHP settings
  3. set_include_path( '.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . get_include_path() );
  4.  
  5. // Includes
  6. include_once('Zend/Loader.php');
  7.  
  8. // Configuration
  9. Zend_Loader::loadClass('Zend_Controller_Front');
  10.  
  11. $front = Zend_Controller_Front::getInstance();
  12. $front->setBaseUrl('/zend_test');
  13. $front->addModuleDirectory('application/');
  14. $front->setModuleControllerDirectoryName('controllers/');
  15. $front->setParam('noViewRenderer' , true);
  16. $front->throwExceptions(true);
  17.  
  18. try {
  19. $front->dispatch();
  20. } catch (Exception $e) {
  21. echo $e->getMessage();
  22. }


Edited!
Offline Stijn - 13/10/2007 12:07
Avatar van Stijn PHP expert is die code niet van je index.php?

Je controller moet IndexController.php heten.
Offline juul - 13/10/2007 12:17
Avatar van juul HTML interesse Ja sorry mijn fout ik was de IndexContoller vergeten maar die kleine i was een typo mijn excuses  
Offline Ibrahim - 13/10/2007 12:19 (laatste wijziging 13/10/2007 12:19)
Avatar van Ibrahim PHP expert zoiets zou je IndexController eruit moeten zien:

  1. <?php
  2.  
  3. Content_IndexController extends Zend_Controller_Action
  4. {
  5.  
  6.  
  7. public function indexAction( )
  8. {
  9.  
  10. // je code
  11. $this->render();
  12.  
  13. }
  14.  
  15.  
  16. }
Offline juul - 13/10/2007 12:21 (laatste wijziging 13/10/2007 14:03)
Avatar van juul HTML interesse Omg THNX _O_ op dat gebied is de zend manual toch nog niet compleet maar in iedergeval _O_

@Psycho, ik ben niet stom ofzo want ik had het al hoor 
Offline Ibrahim - 13/10/2007 12:25
Avatar van Ibrahim PHP expert je moet gewoon je module voor je controllernaam zetten Content_<controllernaam>
Offline juul - 26/10/2007 21:41
Avatar van juul HTML interesse Even nog een kleine vraag ik heb nu dus dit in een template file gezet:
Plaatscode: 3792

Maar dat returned alleen http://localhost terwijl ik dit in de bootstrap heb:
Plaatscode: 3793 Dus dan zou hij toch http://localhost/zend_test moeten returnen.
Offline Stijn - 26/10/2007 23:06
Avatar van Stijn PHP expert En gebruik je ook volgende code in je action of init functie?

  1. $this->view->baseUrl = $this->_request->getBaseUrl();
Offline juul - 27/10/2007 22:23 (laatste wijziging 27/10/2007 22:40)
Avatar van juul HTML interesse Nee, dat is het dus, maar ik heb dus het gevoel dat het stukken beter is dat al in de bootstrap te doen aangezien ik daar zend_view laad en hem in het register zet dus dat bespaard code maar hoe doe ik dan in de bootstrap die _request?

Opgelost, het is dus met $front->getBaseUrl;

Ik heb nu wel nog een andere vraag en die is ik heb dus
$view->addScriptPath('styles/default/');

En dan als ik mij ergens in de module "forum" bevindt wil ik dat het script path wordt "styles/default/forum" is dat mogelijk of moet in in elke render regel forum/viewScript.php zetten?
Offline Grayen - 27/10/2007 23:06
Avatar van Grayen PHP ver gevorderde Ik gebruik ZF zelf niet, dus ik weet niet of wat ik zeg wel goed is, maar het lijkt me kunnen.

Kan je niet zoiets doen.

  1. Zend_Registry::set('module', 'variable met daarin de naam van de module. Die zal je vast wel ergens vandaan kunnen halen');


en dan

  1. $view->addScriptPath('styles/default/'.Zend::Registry::get('module').'/');
Offline juul - 28/10/2007 10:25
Avatar van juul HTML interesse Nee, ik moet gewoon de variabele met de module vinden en ik moet hem niet in het register stoppen want het is gewoon op index.php dat ik hem moet hebben om hem in het path van viewscripts te zetten...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.315s