ti-enxame.com

O objeto JInput não funciona fora da pasta raiz?

eu uso o JInput para obter dados de um formulário e inseri-los no banco de dados, mas ele só funciona quando o arquivo PHP contendo o script JInput é colocado dentro da pasta raiz ?

PHP SCRIPT:

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', __DIR__);
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );
$app = JFactory::getApplication('site');
$user = JFactory::getUser();
$profile = JUserHelper::getProfile($user->id);

$input = JFactory::getApplication()->input;
$username = $input->get('username');
$choice = $input->get('choice');

$db = JFactory::getDbo(); 
$query = $db->getQuery(true);

$columns = array('username', 'choice');
$values = array($db->quote($username), $db->quote($choice));

$query->insert($db->quoteName('#__choice'))
  ->columns($db->quoteName($columns))
  ->values(implode(',', $values));

$db->setQuery($query);
$db->execute();

header("Location: /choice");

?>

Também tentei definir a pasta raiz externa JPATH_BASE com isso:

('JPATH_BASE','../../'); que sempre funcionava ao importar o Joomla CMS fora do diretório raiz, mas com esse material do JInput, estou recebendo uma página em branco?

1
saibbyweb

Se você receber uma página em branco, isso geralmente significa que o servidor encontrou um erro fatal. Você deve ativar o relatório de erros e configurá-lo para um nível de desenvolvimento ou verificar o log de erros do servidor. Deve haver algo escrito lá.

Se você mover esse script para fora da raiz, com certeza precisará ajustar os caminhos do arquivo em seu require_once afirmações. Ele precisa do caminho do seu arquivo atual para a pasta Joomla e suas bibliotecas.

1
Bakual

Você não pode definir JPATH_BASE como relativo, use a abordagem dos arquivos na pasta/cli:

if (file_exists(dirname(dirname(__FILE__)) . '/defines.php'))
{
    require_once dirname(dirname(__FILE__)) . '/defines.php';
}

if (!defined('_JDEFINES'))
{
    define('JPATH_BASE', dirname(dirname(__FILE__)));
    require_once JPATH_BASE . '/includes/defines.php';
}

e, a biblioteca que você está perdendo provavelmente se define! Além disso, você pode gerar algum código para garantir que você está realmente incluindo a biblioteca com base em _JDEFINES definidos ou não.

1
Riccardo Zorn