Como redirecionar usuário com mensagem do sistema no Joomla 3

9

Eu sei que você pode conseguir isso fazendo:

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

mas a documentação em

JFactory :: getApplication

diz que foi descontinuado e sugerimos o uso de enqueueMessagedescontinuado e que não o redireciona, por exemplo, para a página inicial.

Como redirecionar um usuário para a home page com mensagem do sistema usando métodos que não foram preteridos. A documentação diz que eles serão descontinuados na versão 4 do Joomla. Portanto, o método atual é o único ou já existe um novo método padrão para conseguir isso?

Editar: esses métodos não são preteridos no JApplicationCms (bibliotecas do Joomla), mas são preteridos no JApplication (Joomla Plaftorm). Portanto, como JFactory::getApplicationretorna o objeto JApplicationCms, os métodos gostam redirecte enqueueMessagenão são preteridos e usá-los é a maneira correta de redirecionar com mensagem.

Adam M.
fonte

Respostas:

10

Passar a mensagem pela função de redirecionamento foi descontinuado, mas ambos redirect()e enqueueMessage()ainda são bons para serem usados ​​sozinhos.

Você simplesmente precisa usar os dois juntos, assim:

$app = JFactory::getApplication();

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

enqueueMessagearmazena a mensagem em uma sessão; portanto, quando você chama isso antes da redirect()função, o valor da sessão ainda existe na página para a qual você foi redirecionado, assim a mensagem será exibida;)

Lodder
fonte
11
Na verdade, esta é uma solução melhor porque, desde o Joomla! 3.2 JFactory::getApplication()retorna um JApplicationCms objecto em vez de JApplication preterido
Kitase88
É verdade que esses métodos não são preteridos no JApplicationCms (bibliotecas do Joomla), mas são preteridos no JApplication (Joomla Plaftorm). O link da documentação diz que retorna JApplicationCms (o link não funciona) e diz para ver o JApplication onde esses métodos foram descontinuados. Portanto, é confusão na documentação e sinalizarei esse problema, para que possa ser corrigido.
7898 Adam M.
4

A melhor coisa a fazer é lidar com todos os redirecionamentos diretamente nos subcontroladores, onde você só precisa usar $this->setRedirect($url,$msg,$type);e o MVC fará o resto do trabalho.

Se você precisar redirecionar para fora dos controladores, poderá usar a classe JControllerLegacy :

$controller = JControllerLegacy::getInstance("ComponentName");
$controller->setRedirect($url,$msg,$type);
$controller->redirect();
Kitase88
fonte