Переслать на заданную строку URL - PullRequest
0 голосов
/ 07 декабря 2009

В настоящее время я создаю контроллер (ZendFramework), который получает из базы данных строку URL с заданным идентификатором.

/linker/show/id/6

т.е. id=6 /products/list/type/games.

В LinkerController я бы использовал метод _forward() для передачи также необязательных параметров (POST, GET), но этот метод принимает такие параметры, как ($action, $controller, $module, $params), и моя строка /products/list/type/games сейчас недопустима.

Я также не хочу перенаправлять на этот URL (пользователь не должен видеть, что он находится в ProductController).

Есть идеи, как ее решить?

Ответы [ 2 ]

1 голос
/ 07 декабря 2009

Это сложно. Вы хотите смешать между перенаправлением и форвардом.

Работа в обратном направлении:

  1. Вам нужно вызвать $ this -> _ forward ($ action, $ controller, $ module, $ params)

  2. Итак, вам нужно сохранить эти четыре параметра в таблице компоновщика ($ params будет сериализовано)

Тогда ваш код компоновщика может выглядеть так:

public function showAction()
{
  $linker_table = new LinkerTable();
  $link = $linker_table->find(array('id' => $this->_getParam('id')));

  // first, try to forward, if all settings are there
  if ( $link && $link->hasForwardSettings() ) {
    $this->_forward( $link->action, $link->controller, $link->module, unserialize($link->params));
    return;
  }

  // perhaps other links can just be straight redirects, so then $this->_redirect($link->url)
}

Либо это, либо какая-то магия mod_rewrite.

1 голос
/ 07 декабря 2009

Невозможно переадресовать на URL (из-за характера пересылки - создания нового внутреннего объекта запроса). Вы можете только переслать запрос (модуль, контроллер, действие).

Использовать перенаправление insted (в контроллере):

$this->_helper->redirector->gotoUrlAndExit($url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...