Как перенаправить пользователя с системным сообщением в Joomla 3

9

Я знаю, что вы можете достичь этого, выполнив:

JFactory::getApplication->redirect(url, message, type)

но документация на

JFactory :: getApplication

говорит, что он устарел и предлагает использовать, enqueueMessageчто также устарело, и это не перенаправляет вас, например, на домашнюю страницу.

Как я могу перенаправить пользователя на домашнюю страницу с системным сообщением, используя методы, которые не являются устаревшими. В документации сказано, что они (?) Будут устаревшими в 4-й версии Joomla, поэтому является ли текущий метод единственным или уже существует новый стандартный метод для достижения этой цели?

Изменить: Эти методы не рекомендуется в JApplicationCms (библиотеки Joomla), но не рекомендуется в JApplication (Joomla Plaftorm). Таким образом, поскольку JFactory::getApplicationвозвращается объект JApplicationCms, то такие методы, как redirectи enqueueMessageне являются устаревшими, и их использование является правильным способом перенаправления с сообщением.

Адам М.
источник

Ответы:

10

Передача сообщения с помощью функции переадресации является устаревшим, но как redirect()и enqueueMessage()все еще и прекрасно использовать самостоятельно.

Вам просто нужно использовать оба вместе, вот так:

$app = JFactory::getApplication();

$app->enqueueMessage('Redirect to another page was successful', 'success');
$app->redirect(JRoute::_('index.php'));

enqueueMessageсохраняет сообщение в сеансе, поэтому, когда вы вызываете его перед redirect()функцией, значение сеанса все еще существует на странице, на которую вы были перенаправлены, поэтому сообщение будет отображаться;)

Лоддер
источник
1
На самом деле это лучшее решение, потому что, поскольку Joomla! 3.2 JFactory::getApplication()возвращает объект JApplicationCms вместо устаревшего JApplication
Kitase88
Правда, эти методы не рекомендуется использовать в JApplicationCms (библиотеки Joomla), но не рекомендуется использовать в JApplication (Joomla Plaftorm). Ссылка на документацию говорит, что возвращает JApplicationCms (ссылка не работает) и говорит, чтобы увидеть JApplication, где эти методы устарели. Так что это путаница с документацией, и я сообщу об этой проблеме, чтобы ее можно было исправить.
Адам М.
4

Лучше всего обрабатывать все перенаправления непосредственно в субконтроллерах, где вам просто нужно использовать, $this->setRedirect($url,$msg,$type);а MVC сделает всю остальную работу.

Если вам нужно перенаправить за пределы контроллеров, вы можете использовать класс JControllerLegacy :

$controller = JControllerLegacy::getInstance("ComponentName");
$controller->setRedirect($url,$msg,$type);
$controller->redirect();
Kitase88
источник