Zend: получить текущий URL для использования в контроллере - PullRequest
1 голос
/ 24 февраля 2010

У меня есть этот контроллер, который просто меняет язык в сеансе, чтобы я мог установить его в начальной загрузке.

За исключением того, что я хочу изменить '$ this -> _ redirect (' library / recipes / list ');' быть URL страницы, на которой они находятся. Я попробовал несколько функций, и они, кажется, не работают.

Я новичок в Zend, спасибо!

class Library_LanguageswitchController extends Zend_Controller_Action {

public function init() {
  $this->_helper->layout->disableLayout ();
  $this->_helper->viewRenderer->setNoRender ();
 }

 public function switchAction() {
  $session = new Zend_Session_Namespace ( 'whatcould' );
  $session->language = $this->_getParam ( 'lang' );

  $this->_redirect ( 'library/recipes/list' );
 }

}

Ответы [ 6 ]

4 голосов
/ 24 февраля 2010

Нет встроенного способа сделать это на афаике. Вы хотите перенаправить обратно к рефереру, который может или не может быть сохранен в $_SERVER['HTTP_REFERER'].

Лучший подход, который я могу придумать, это написать Zend_Controller_Action_Helper с такой сигнатурой метода

// Returns the referer from $_SERVER array or $fallback if referer is empty
public function getReferer($fallback);

// proxy to getReferer()
public function direct($fallback);

Тогда вы могли бы использовать

public function switchLanguageAction 
{
    // ... insert code to switch the language for this user ...
    $this->_redirect( $this->_helper->referer('/fallback/to/url') );
}

В качестве альтернативы вы можете использовать пользовательский помощник по перенаправлению, который может достичь того же за один раз.

0 голосов
/ 05 августа 2015

Вы можете использовать что-то вроде:

$current_page_url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
0 голосов
/ 21 июля 2010

Другой простой способ получить / установить реферер - добавить параметр в ваш frontController в вашем коде начальной загрузки:

$frontController = Zend_Controller_Front::getInstance();
$frontController->setParam('referer', $_SERVER['HTTP_REFERER']);

и затем захватите реферер с вашего контроллера следующим образом:

$referer = $this->getInvokeArg('referer');

Из документов Zend для Zend_Controller_Front:

7.3.4. Front Controller Parameters

In the introduction, we indicated that the front controller also acts as a registry for the various controller components. It does so through a family of "param" methods. These methods allow you to register arbitrary data – objects and variables – with the front controller to be retrieved at any time in the dispatch chain. These values are passed on to the router, dispatcher, and action controllers. 
0 голосов
/ 24 февраля 2010

Я думаю, что, возможно, вы смотрите на это с неправильной точки зрения. Контроллер запускается после завершения маршрутизации. Из того, что я вижу, вы действительно хотите изменить язык и затем направить его к контроллеру. Это может быть достигнуто путем настройки фронт-контроллера и подключения к одному из событий там.

0 голосов
/ 24 февраля 2010
0 голосов
/ 24 февраля 2010

Зенд не имеет функции для этого. Но простой способ - сохранить URL в сеансе и использовать его здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...