Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] brak akcji
Forum PHP.pl > Forum > PHP > Frameworki
nithajasz
Witam,

Jakoś mam ostatnio niemoc w myśleniu chyba..

W żaden sposób nie mogę zrobić by w momencie braku akcji w danym kontrolerze do którego się odwołuje przekierowywało mnie do domyślnej akcji kontrolera.

Próbowałem już nawet wykorzystać plugin z dokumentacji ale co bym nie zrobił wywala mi błąd...

Ma ktoś może chęć jakoś mnie wspomóc jakimś artem czy coś podpowiedzieć? Najoptymalniejsza wersja dla mnie to plugin...

Pozdrawiam
LBO
Podaj błąd, pokaż swój od - bez tego nie pomożemy. Skoro plugin z dokumentacji nie działa, to musi być wina po Twojej stronie.
nithajasz
  1. <?php
  2. [b]Fatal error[/b]: Call to undefined method Zend_Controller_Dispatcher_Standard::getController()
  3. ?>


Plugin
  1. <?php
  2. class My_Controller_PreDispatchPlugin extends Zend_Controller_Plugin_Abstract
  3. {
  4. public function preDispatch(Zend_Controller_Request_Abstract $request)
  5. {
  6. $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
  7. $controller = $dispatcher->getController($request);
  8. if (!$controller) {
  9. $controller = $dispatcher->getDefaultControllerName($request);
  10. }
  11. $action  = $dispatcher->getAction($request);
  12.  
  13. if (!method_exists($controller, $action)) {
  14. $defaultAction = $dispatcher->getDefaultAction();
  15. $controllerName = $request->getControllerName();
  16. $response = Zend_Controller_Front::getInstance()->getResponse();
  17. $response->setRedirect('/' . $controllerName . '/' . $defaultAction);
  18. $response->sendHeaders();
  19. }
  20. }
  21. }
  22. ?>


  1. <?php
  2. //bootstrap
  3. self::$frontController->registerPlugin(
  4. new My_Controller_PreDispatchPlugin()
  5. );
  6. ?>


Nie mam pojęcia już czy to w wersji kombinowanej zmienianej czy początkowej. Na tym w każdym momencie stanąłem po paru modyfikacjach i zmianach i cofaniach w tył kodu..

Nie wiem może po prostu coś usunałem i nie mogę się teraz dopatrzeć..
LBO
Kod
[php]<?php
[b]Fatal error[/b]:  Call to undefined method Zend_Controller_Dispatcher_Standard::getController()
?>[/php]

Wszystko się zgadza - Zend_Controller_Dispatcher_Standard nie posiada metosy getController().

Zajrzałem do źródeł i może chodziło Tobie o getcontrollerName() i dalej getActionMethod()?

I nawet jeżeli mam rację:
  1. <?php
  2. if (!method_exists($controller, $action)) {
  3. //code
  4. }
  5. ?>


nic Tobie nie da, bo o ile pamiętam kontrolery nie są preloadowane (chociaż to te zależy od Ciebie jaką strukturę aplikacji wybrałeś).
nithajasz
Też właśnie patrzyłem, że nie ma tej metody, dlatego dziwi mnie, że to nie działa bo to jest (jak sprawdziłem) żywcem z dokumentacji zenda plugin..

A który plugin bym nie znalazł czy pisał sam wychodzi dokładnie ten sam błąd.. przy getControllerName() to samo bo też nie ma tej metody tam..

Próbowałem też tak..

  1. <?php
  2. class My_Controller_PreDispatchPlugin extends Zend_Controller_Plugin_Abstract
  3. {
  4. function preDispatch(Zend_Controller_Request_Abstract $request){
  5. /*
  6.  * pobierz instancje frontControllera i dispatchera
  7.  */
  8.  $frontController = Zend_Controller_Front::getInstance();
  9. $dispatcher = $frontController->getDispatcher();
  10. /*
  11.  * sprawdz czy zadanie $request dispatchera jest wykonalne
  12.  */
  13. if ($dispatcher->isDispatchable($request)){
  14. //tu było dodatkowe sprawdzanie auth etc. ale to i tak nie o to teraz mi chodzi
  15.  
  16. }else{
  17. /*
  18.  * obiekt zadania nie istnieje
  19.  * przekieruj uzytkownika na strone 404
  20.  */
  21. $request->setControllerName('Exception');
  22. $request->setActionName('web404');
  23. }
  24. }
  25. }
  26. ?>


Ale to zupełnie nie działa.. wywala mi wyjątek o braku akcji przykładowo cos przy url www.cos.pl/kontroler/cos


Edit: Problem rozwiązałem w inny sposób co prawda niż chciałem ale działa. Temat można zamknąć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.