Перенаправить на другой вид в контроллере

Это моя структура каталогов Zend Framework (включает только то, что вам нужно):

-Controllers
    -HomeController.php
    -IndexController.php
-Views
    -scripts
        -home
            -index.phtml
        -index
            -index.phtml

В IndexController я хочу автоматически перенаправить их на домашний вид.

Как мне этого добиться?

Это то, что я пробовал до сих пор:

header('/application/views/home');

Я хочу полностью перенаправить на другой вид и контроллер. Не другое действие в пределах одного и того же контроллера.


person RSM    schedule 12.08.2012    source источник
comment
Я думаю, что маршрутизация — это то, что вам нужно framework.zend.com/manual/en /zend.controller.router.html   -  person MilMike    schedule 12.08.2012


Ответы (2)


у вас есть несколько вариантов:

используйте действие _redirect служебный метод (очень часто)

public function indexAction() {
    $this->_redirect('/application/views/home');
}

или используйте действие _forward служебный метод чтобы просто выполнить запрошенное действие без фактического перенаправления

public function indexAction() {
        $this->_forward('index', 'home');
    }

вы можете использовать помощник действий redirector, похоже на _redirect, но имеет гораздо больше параметров.

public function indexAction() {
            $this->getHelper('Redirector')->gotoSimple('index','home');
        }

Это касается основ перенаправления внутри контроллера, если вы хотите фактически отобразить home/index.phtml из /idex/index, вы можете использовать помощник действия viewrenderer.

Я позволю тебе раскрыть эти секреты.

person RockyFord    schedule 12.08.2012

Если вы хотите отобразить другое действие внутри текущего действия, это возможно в вашем действии следующим образом:

$this->render('actionName');

или явно установите шаблон для рендеринга

$this->renderScript('path/to/viewscript.phtml');

ОБНОВЛЕНИЕ: перечитывая ваш вопрос, я полагаю, вы хотите использовать

_forward($action, $controller = null, $module = null, array $params = null): выполнить другое действие. При вызове в preDispatch() текущее запрошенное действие будет пропущено в пользу нового. В противном случае после обработки текущего действия будет выполнено действие, запрошенное в _forward().

or

_redirect($url, array $options = array()): перенаправить в другое место. Этот метод принимает URL-адрес и необязательный набор параметров. По умолчанию он выполняет перенаправление HTTP 302.

см. документацию по этому вопросу.

person Paul T. Rawkeen    schedule 12.08.2012
comment
Я хочу полностью перенаправить на другой вид и контроллер. Не действие в пределах одного контроллера - person RSM; 12.08.2012