【问题标题】:JFactory failing to importJFactory 无法导入
【发布时间】:2013-10-04 14:50:28
【问题描述】:

我正在尝试为适用于我的 2.5 Joomla 网站的 android 应用程序制作登录系统。我试图通过制作一个 Joomla 插件来做到这一点,该插件 android 应用程序将发布数据发送到一个 php 文件,然后该文件对用户进行身份验证以查看凭据是否正确用于登录。我整个下午都在努力让它工作,但似乎我所有导入 JFactory 的尝试都失败了。

我有以下代码在第一次提到 JFactory 时出错。我尝试导入它也不起作用。

<?php
//needed to be commented out otherwise the android application cannot send data to the file
//defined('_JEXEC') or die;

define('_JREQUEST_NO_CLEAN', 1); 
define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

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

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

require_once JPATH_BASE.'/includes/framework.php';
require_once JPATH_BASE.'/includes/helper.php';
require_once JPATH_BASE.'/includes/toolbar.php';
require JPATH_BASE.'/library/joomla/factory.php';

$email = $_POST['email'];
$password = $_POST['password'];
file_put_contents("Log.txt", "got data: ".$email." and ".$password);
$credentials->email = $email;
$credentials->password = $password;
$responce;

//error occurs here
$db     = JFactory::getDbo();
...
?>

我已经查看了有关导入 JFactory 的其他问题,但没有一个对我有用:
- JFactory,JDatabase class not found in /var/www/joomla2.5/database.php
- Class 'JFactory' not found
- include Jfactory class in an external php file, Joomla

所以我的简化问题是如何导入 JFactory 或至少在这种情况下解决它?任何感觉比我聪明的人都会很乐意回答这个问题:)

一般信息:

  • 运行 php 5.1.13
  • Joomla 2.5
  • 在 wamp 服务器 (localhost) 上测试

【问题讨论】:

  • 我建议升级到 PHP 5.3

标签: php joomla joomla2.5


【解决方案1】:

我建议采用官方 Joomla 方式并引导应用程序。我所做的工作非常好,是推荐的 Joomla 方式(我没有测试下面的代码,但它应该给你一个起点,因为它是我代码中多个来源的复制粘贴)。

define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

error_reporting(E_ALL | E_NOTICE);
ini_set('display_errors', 1);

define('JPATH_BASE', dirname(dirname(dirname(__FILE__))));
require_once JPATH_BASE.DS.'includes'.DS.'defines.php';
require JPATH_LIBRARIES.DS.'import.php';
require JPATH_LIBRARIES.DS.'cms.php';

JLoader::import('joomla.user.authentication');
JLoader::import('joomla.application.component.helper');

class MyJoomlaServer extends JApplicationWeb {

    public function doExecute() {
        $config = JFactory::getConfig();
        $email = $_POST['email'];
        $password = $_POST['password'];
        $user = ...;//get the user with the email
        file_put_contents("Log.txt", "got data: ".$email." and ".$password);
        $authenticate = JAuthentication::getInstance();
        $response = $authenticate->authenticate(array('username' => $user->username, 'password' => $password));

        return $response->status === JAuthentication::STATUS_SUCCESS;
    }

    public function isAdmin() {
        return false;
    }
}

$app = JApplicationWeb::getInstance('MyJoomlaServer');
JFactory::$application = $app;
$app->execute();

类似的东西对我有用。更多平台示例可以在这里找到https://github.com/joomla/joomla-platform-examples/tree/master/web

【讨论】:

  • 像魅力一样工作!由于文件位置,只需要修改JPATH_BASE。干杯伙伴!
  • 我不明白为什么您在代码的倒数第三行得到实例“MyJoomlaServer”。这是在 API 中还是默认设置?
【解决方案2】:

试试这个,

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$db     = JFactory::getDbo();

它会起作用的,你错过了JFactory::getApplication('site');

希望对你有帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多