Zend Framework - Перенаправление на IndexController в другом модуле - PullRequest
3 голосов
/ 11 мая 2011

Все,

У меня есть следующая настройка проекта в Zend's MVC Framework.Получив доступ к приложению, я хочу, чтобы пользователь перенаправил на «мобильный» модуль, а не на IndexController в модуле «по умолчанию».Как мне это сделать?

-billingsystem
-application
    -configs
        application.ini
    -layouts
        -scripts
            layout.phtml
    -modules
        -default
            -controllers
                IndexController.php
            -models
            -views
            Bootstrap.php
        -mobile
            -controllers
                IndexController.php
            -models
            -views
            Bootstrap.php
Bootstrap.php
-documentation
-include
-library
-logs
-public
    -design
        -css
        -images
        -js
    index.php
    .htaccess

Мой index.php имеет следующий код:

require_once 'Zend/Application.php';
require_once 'Zend/Loader.php';


$application = new Zend_Application(
  APPLICATION_ENV,
  APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap()->run();

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

у вас есть два варианта:

1 - установите mobile в качестве модуля по умолчанию для вашего приложения, отредактировав файл application.ini resources.frontController.defaultModule = "mobile"

2 - вы можете создать плагин, который будет перехватывать каждый запрос и перенаправлять его на тот же контроллер и действие, но на мобильный модуль

class Name_Controller_Plugin_mobile extends Zend_Controller_Plugin_Abstract {

    public function preDispatch(Zend_Controller_Request_Abstract $request) {

                $module = $request->getModuleName();
                $controller = $request->getControllerName();
                $action = $request->getActionName();
                if($module !== "mobile" || $module !== "error"){
                  return $request->setModuleName("mobile")->setControllerName("$controller")
                    ->setActionName("$action")->setDispatched(true);

                 }else{
                   return ;
                 }
    }
}

и не забудьте добавить контроллер ошибок в предложение if, чтобы избежать загадочного цикла, когда ваше приложение выдает ошибку, и это все

3 голосов
/ 12 мая 2011

Внутри контроллера вы можете использовать

 _forward(string $action, 
          string $controller = null, 
          string $module = null, 
          array $params = null)

Например:

$this-_forward("index", "index", "mobile");

Это будет относится к действию index, контроллеру index мобильного модуля, вы также можетеиспользуйте null:

$this-_forward(null, null, "mobile");

Передача null будет использовать текущее действие и контроллер.

Надеюсь, что поможет.

...