Joomla setRedirect не работает

У меня есть простой контроллер Joomla, но я могут перенаправить что угодно.

Согласно документации:

class MyController extends MyBaseController {

 function import() {
    $link = JRoute::_('index.php?option=com_foo&ctrl=bar');
    $this->setRedirect($link);
  }

}
//The url contains & html escaped character instead of "&"

Это должно работать, но я получаю неправильный URL. Есть ли что-то, что ям здесь отсутствует? Почему Joomla конвертирует все «&» персонажи в '&s? Как я должен использовать setRedirect?

Спасибо

Ответы на вопрос(5)

Попробуй это.

$mainframe = &JFactory::getApplication();
$mainframe->redirect(JURI::root()."index.php?option=com_foo&ctrl=bar","your custom message[optional]","message type[optional- warning,error,information etc]");
 Rakesh Sharma31 окт. 2012 г., 10:41
я согласен с твоим ответом @jobin вызвать $ this->setRedirect ($ ссылка); setRedirect () не определен в вашем пользовательском классе, поэтому используйте jobin, чтобы ответить на него 'с действительно работает
 Opi31 окт. 2012 г., 20:43
на самом деле он у меня есть, просто я устанавливаю контроллер между JController и моим, чтобы мои собственные контроллеры могли совместно использовать определенные функции. Но спасибо

JRoute::_() по умолчанию true и полезно для соответствия XML. Что он делает, так это то, что внутри статического метода он использует функцию php htmlspecialchars следующим образом:$url = htmlspecialchars($url) заменить & для XML.

/libraries/joomla/application/application.

Найти строку 400

    // If the headers have been sent, then we cannot send an additional location header
    // so we will output a javascript redirect statement.
    if (headers_sent())
    {
        echo "<script>document.location.href='" . htmlspecialchars($url) . "';</script>\n";
    }

заменить на

    // If the headers have been sent, then we cannot send an additional location header
    // so we will output a javascript redirect statement.
    if (headers_sent())
    {
        echo "<script>document.location.href='" . $url . "';</script>\n";
    }

Это работает!

 meagar19 июн. 2016 г., 17:40
Это худшее из возможных решений. Никогда не изменяйте стороннюю библиотеку, чтобы исправить то, чтоэто не ошибка, Если вам неудобно отправлять запрос на извлечение основных пользователей Joomla для объединения ваших изменений, вы не должны вносить эти изменения. Как и тывероятно, сломатьостальное вашего приложения, и это в корне меняет поведение Joomla, от которого могут зависеть другие сторонние библиотеки.

вы можете быстро понять, почему это происходит:

if (headers_sent())
    {
        echo "<script>document.location.href='" . htmlspecialchars($url) . "';</script>\n";
    }
    else
    {
    ... ... ...

Проблема в том, что ваша страница, возможно, уже вывела некоторые данные (через эхо или другие средства). В этой ситуации Joomla запрограммирован на использование простого перенаправления javascript. Однако в этом редиректе javascript к URL-адресу применяется htmlspecialchars ().

Простое решение состоит в том, чтобы просто не использовать функцию Joomlas и напрямую писать javascript таким способом, который имеет больше смысла:

echo "<script>document.location.href='" . $url . "';</script>\n";

Это работает для меня :)

вместо

$link = JRoute::_('index.php?option=com_foo&ctrl=bar');
$this->setRedirect($link);

использование

$link = JRoute::_('index.php?option=com_foo&ctrl=bar',false);
$this->setRedirect($link);

чтобы это работало.

Ваш ответ на вопрос