#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
. Спасибо за предупреждение.