Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] problem z modul/kontroler/akcja
phpion
post
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Hejka,
mam kolejny problem z ZF, walczyłem wczoraj do 1 w nocy no i dziś do teraz, w końcu się poddałem. Zamierzenie mam takie:
http://localhost/
odpala modul 'frontend', kontroler 'index' oraz akcję 'index' (aktualnie działa również http://localhost/frontend, http://localhost/frontend/index, http://localhost/frontend/index/index więc tu jest OK).
Równocześnie chciałbym aby wejście w:
http://localhost/admin
odpalało moduł 'admin', kontroler 'index' oraz akcję 'index' co niestety aktualnie się nie dzieje :/ Pomimo usilnych prób print_r($frontController->getRequest()) zawsze pokazje admina jako akcję, a nie moduł. W manualu znalazłem przykład:
  1. <?php
  2. // Assuming the following:
  3. $ctrl->setControllerDirectory(
  4. 'default' => '/path/to/default/controllers',
  5. 'news' => '/path/to/blog/controllers',
  6. 'blog' => '/path/to/blog/controllers'
  7. )
  8. );
  9. ...
  10. Module + controller + action + params:
  11. <a href="http://example/blog/archive/list/sort/alpha/date/desc" target="_blank">http://example/blog/archive/list/sort/alpha/date/desc</a>
  12. module  == blog
  13. controller == archive
  14. action  == list
  15. sort  == alpha
  16. date  == desc
  17. ?>

czyli dokładnie to, czego potrzebuję jednak nie bardzo chce to działać (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Robię to tak:
index.php
  1. <?php
  2. require_once('../config.php');
  3. require_once('../__autoload.php');
  4.  
  5. $db = Zend_Db::factory('Pdo_'.DB_TYPE, array('host' => DB_HOST, 'username' => DB_USER, 'password' => DB_PASS, 'dbname' => DB_BASE));
  6. $db->setFetchMode(1);
  7. $ctrls = array(
  8. 'frontend' => PATH_MODULES.'/frontend/controllers',
  9. 'admin' => PATH_MODULES.'/admin/controllers'
  10. );
  11.  
  12. $frontController = Zend_Controller_Front::getInstance();
  13. $frontController->setControllerDirectory($ctrls);
  14. $frontController->setDefaultModule('frontend');
  15. $frontController->setParam('db', $db);
  16.  
  17. Zend_Controller_Front::run(array(PATH_MODULES.'/admin/controllers', PATH_MODULES.'/frontend/controllers'));
  18.  
  19. echo '<pre>';
  20. print_r($frontController->getRequest());
  21. ?>

Zauważyłem, że jeśli zmienię kolejność w tablicy przekazywanej do Zend_Controller_Fron::run() to zawsze używany jest ten ostatni moduł.
Reasumując: w jaki sposób zmusić ZF aby:
http://localhost/ (+ ew. parametry) ładowało dane z 'frontend' <- myślałem, że osiągnę to przez $frontController->setDefaultModule('frontend');
http://localhost/admin (+ ew. parametry) ładowało dane z 'admin'.
Uproszczona struktura moich katalogów:
  1. /
  2. --- app
  3. ------ admin
  4. --------- controllers
  5. --------- models
  6. --------- views
  7. ------ frontend
  8. --------- controllers
  9. --------- models
  10. --------- views
  11. --- www
  12. ------ .htaccess
  13. ------ index.php
  14. --- __autoload.php
  15. --- config.php

Proszę o pomoc bo nie wiem jak to ugryźć :/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
wolditm
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 2
Dołączył: 20.07.2005

Ostrzeżenie: (0%)
-----


Primo
po co 2 razy robić to samo czyli
  1. <?php
  2. Zend_Controller_Front::run( $params );
  3. ?>

jak wystarczy
  1. <?php
  2. $frontController = Zend_Controller_Front::getInstance();
  3. $frontController->setControllerDirectory($ctrls);
  4. $frontController->setDefaultModule('frontend');
  5. $frontController->setParam('db', $db);
  6. $frontController->dispatch();
  7. ?>


na przyszłość:
Zend_Controller_Front::run() robi to co wyżej miałes w kodzie czyli getInstance()+setModules+dispatch

Duo:
Jeżeli zrobiłeś coś takiego:
  1. <?php
  2. $ctrls = array(
  3. 'frontend' => PATH_MODULES.'/frontend/controllers',
  4. 'admin' => PATH_MODULES.'/admin/controllers'
  5. );
  6. ?>


to twoje controllery powinny wyglądać tak*:
  1. <?php
  2. class Admin_IndexController extends Zend_Controller_Action
  3.  {
  4. // reszta
  5.  }
  6. ?>


//czyli wzór jest
class MODUŁ_NAZWAController extends
-----
* wzór jest do modułów innych niż default czyli u Ciebie przy Frontend robisz standardowo IndexController
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Serdeczne dzieki za pomoc! (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 19:47