Nel controller di un un componente, dopo aver inviato dei dati da frontend questi vengono elaborati e salvati nel db.
Fin qui tutto ok, il problema arriva quando si deve effettuare il redirect.
La funzione che si occupa della manipolazione dei dati finisce così
if (!$row->store())
{
echo "<script type='text/javascript'>
alert('".$row->getError()."');
window.history.go(-1);
</script>\n";
exit();
}
$this->redirect('index.php?option=' . $option . '&id=' . $post['pollid'] . '&view=poll', JTEXT::_(CRDPOLL_VOTE_ADDED));
la store() va a buon fine tant'è che nel db trovo i dati e sono correttamente disponibili dal resto del componente, il redirect però mi porta ad una pagina bianca con solo il titolo del componente.
Il link che viene fornito alla funzione redirect è giusto, ho messo queste righe nel codice per provare
echo 'index.php?option=' . $option . '&id=' . $post['pollid'] . '&view=poll' . ' --- ' . JTEXT::_(CRDPOLL_VOTE_ADDED);
$this->redirect('index.php?option=' . $option . '&id=' . $post['pollid'] . '&view=poll', JTEXT::_(CRDPOLL_VOTE_ADDED));
echo "<pre>";
print_r($this);
echo"</pre>";
Il primo echo mi stampa il link per il redirect ed è corretto, facendo copia/incolla sulla barra degli indirizzi mi porta alla pagina che voglio.
print_r($this) mi stampa questo:
CommpollsController Object
(
[_basePath] => C:\xampp\htdocs\joomla\j15x\prove\components\com_commpolls
[_name] => commpolls
[_methods] => Array
(
[0] => addvote
[1] => display
)
[_taskMap] => Array
(
[addvote] => addvote
[display] => display
[__default] => display
)
[_task] => addvote
[_doTask] => addvote
[_path] => Array
(
[view] => Array
(
[0] => C:\xampp\htdocs\joomla\j15x\prove\components\com_commpolls\views\
)
)
[_redirect] =>
[_message] =>
[_messageType] => message
[_acoSection] =>
[_acoSectionValue] =>
[_errors] => Array
(
)
[_data] => Array
(
)
[redirect] => index.php?option=com_commpolls&id=1&view=poll
)
Perché poi non vengo inviato alla pagina index.php?option=com_commpolls&id=1&view=poll ?
Nell'entry point del componente ovviamente ho
$controller = new CommpollsController();
$controller->execute( JRequest::getVar( 'task' ) );
$controller->redirect();