куда поместить redirect() для всех модулей приложения

#symfony1 #doctrine #generator

#symfony1 #доктрина #генератор

Вопрос:

В приложении symfony у меня есть список модулей, которые построены на генераторе doctrine admin. Поскольку приложение встроено в другую систему, мне нужно заменить все вызовы redirect() в классе action (из sfAction.class.php ) Я могу вставить это в каждый модуль, но есть ли центральное место, которое я мог бы использовать?

Оригинальное перенаправление (symfony/lib/action/sfACtion.class.php )

 public function redirect($url, $statusCode = 302)
{
// compatibility with url_for2() style signature
if (is_object($statusCode) || is_array($statusCode))
{
  $url = array_merge(array('sf_route' => $url), is_object($statusCode) ? array('sf_subject' => $statusCode) : $statusCode);
  $statusCode = func_num_args() >= 3 ? func_get_arg(2) : 302;
}

$this->getController()->redirect($url, 0, $statusCode);

throw new sfStopException();
  

}

мое изменение

 function redirect($url, $statusCode = 302){
    if (is_object($statusCode) || is_array($statusCode)){
        $url = array_merge(array('sf_route' => $url), is_object($statusCode) ? array('sf_subject' => $statusCode) : $statusCode);
        $statusCode = func_num_args() >= 3 ? func_get_arg(2) : 302;
    }

    if (is_array($url)){
        $use_url = $this->getController()->genUrl($url, true);
    }else if (substr($url,0,1) == '@'){
        $use_url = $this->getController()->genUrl($url, true);
    }else{
        $use_url = $url;
    }
    $url = NZGBCTools::makeUriJoomlaCompatible($use_url);       

    $this->getController()->redirect($url, 0, $statusCode);

    throw new sfStopException();

}
  

Ответ №1:

Создайте новый класс, который расширяет sfActions, и сделайте так, чтобы ваши классы действий расширяли его. Таким образом, у вас будет центральное место, которое вам нужно.

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

1. Спасибо, это сработает, я искал «symfony place», но это сработает для меня.

2. Это «symfony place» настолько, насколько это вообще возможно. Многие вещи можно легко сделать с помощью расширения базового класса symfony. Потрясающий пример смотрите symfony-project.org/more-with-symfony/1_4/en /…