Как я могу вызвать forward in action helper

#php #zend-framework

#php #zend-framework

Вопрос:

В обычном действии я делаю это $this->_forward() . Я хочу сделать то же самое в action helper. Это не работает

 $this->getActionController()->_forward('');
$this->_actionController()->_forward('');
  

Комментарии:

1. Вы пробовали $this->_forward() ?

2. Вызов _forward($action, $controller) изменяет объект запроса и снова выполняет цикл отправки. Можете ли вы дать некоторое представление о том, почему вы хотите использовать forward в action helper?

Ответ №1:

_forward — это защищенная функция, поэтому очевидно, что вы не можете вызвать ее через

 $this->getActionController()->_forward('');
  

Самый простой способ сделать метод forward пригодным для использования в общедоступной области — создать новый метод forward() (обратите внимание, что ‘forward’, а не ‘_forward) и прокси-сервер для метода _forward:

 class App_Controller_Action extends Zend_Controller_Action
{
    public function forward($action, $controller = null, $module = null, array $params = null)
    {
        return $this->_forward($action, $controller, $module, $params);
    }
}
  

Не тестировал, но это должно сработать
Удачного взлома.

Комментарии:

1. Должна быть возможность переопределения _forward() напрямую, поскольку переход с защищенного на общедоступный расширяет видимость.

2. _forward — это конечная защищенная функция, поэтому, если вы не хотите изменить исходный код вашей локальной копии фреймворка, вы не можете этого сделать

3. Ого! Абсолютно верно, я не осознавал, что это _forward() было указано как final . Спасибо за предупреждение.