2012-10-30 6 views
2

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

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

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 преобразует все символы «&» в &? Как я могу использовать setRedirect?

Спасибо

ответ

10

Хорошо, я исправил его. Так что если кто-то нуждается в этом:

вместо

$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); 

, чтобы заставить его работать.

1

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

1

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

$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]"); 
+0

Я согласен с вашим ответом @jobin cause $ this-> setRedirect ($ link); setRedirect() не определен в вашем пользовательском классе, поэтому используйте функцию jobin answer, это действительно работает –

+0

Фактически у меня есть это, просто я поставил контроллер между JController и моим собственным, чтобы мои собственные контроллеры могли совместно использовать определенные функции. Но спасибо – Opi

0

После проверки источника 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"; 

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

-3

/библиотеки/Joomla/приложения /application.php

поиск строки 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"; 
    } 

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

+1

Это худшее возможное решение. Никогда не изменяйте стороннюю библиотеку, чтобы исправить что-то, что ** не является ошибкой **. Если вы не чувствуете себя комфортно, выдавая запрос на перенос для основных пользователей Joomla, чтобы объединить ваши изменения, вы не должны вносить изменения.Как бы то ни было, вы, вероятно, сильно нарушаете * отдых * своего приложения и кардинально изменяете поведение Joomla, от которого могут зависеть другие сторонние библиотеки. – meagar

Смежные вопросы