Doctrine 在Joomla 1.5中使用学说

Doctrine 在Joomla 1.5中使用学说,doctrine,joomla1.5,Doctrine,Joomla1.5,我试图在Joomla 1.5中使用原则,但无法运行任何东西 根据这篇文章: 我立即得到致命错误:类“致命错误:调用/var/www/html/hosts/joomla/public\u html/components/com\u bugs/bugs.php中未定义的方法JController::getInstance() php文件如下所示: // no direct access defined('_JEXEC') or die; // Include dependancies jimpo

我试图在Joomla 1.5中使用原则,但无法运行任何东西

根据这篇文章:

我立即得到
致命错误:类“致命错误:调用/var/www/html/hosts/joomla/public\u html/components/com\u bugs/bugs.php中未定义的方法JController::getInstance()

php文件如下所示:

// no direct access 
defined('_JEXEC') or die; // Include dependancies 
jimport('joomla.application.component.controller');
//require_once(JPATH_LIBRARIES . '/doctrine/vendor/autoload.php');
require_once(JPATH_LIBRARIES . '/doctrine/bootstrap.php');
require_once(JPATH_LIBRARIES . '/doctrine/JoomlaDoctrineBootstrapper.php');
require_once(JPATH_COMPONENT.DS.'controller.php');
//$controller = new BugsController(JRequest::getVar('task', ''));
$controller = JController::getInstance('Bugs');
不确定如何实现此功能,当尝试使用$controller=new BugsController时,错误为:
致命错误:在中找不到类“JController”

这是因为我在bugs.php和/public_html/components/com_bugs/controller.php extend/public_html/libraries/doctrine/JoomlaDoctrineBootstrapper.php中启用了自动加载,JoomlaDoctrineBootstrapper可以在composer和自动加载完成后再也找不到JController

我开始认为不可能将Joomla与Doctrine一起使用,因为Doctrine必须与composer一起安装(没有找到关于如何下载和配置它的任何其他文档),而且composer似乎想要供应商中的所有内容,所以必须将所有Joomla类也放在供应商中

[更新]

看起来,无论composer在/public\u html/libraries/doctrine/vendor/autoload.php中做了什么,都会完全破坏jimport('joomla.application.component.controller')

但是,不包括自动加载给了我另一个问题,比如没有找到任何条令类:
Class'Doctrine\Common\Cache\ArrayCache'未找到


也许我会尝试破解/public_html/libraries/doctrine/vendor/composer/autoload_real.php,看看是否可以为我加载Joomla类。

jimport或composer都不起作用,因为jimport定义了
\u autoload
。我使用的不是
\u autoload
而是
spl\u autoload\u register
,它似乎只适用于从5.1.2开始的PHP版本

已更改加载程序: /public_html/libraries/loader.php

class JLoader
{
    public static function autoload($class)
    {
        if(JLoader::load($class)) {
            return true;
        }
        return false;
    }
//... other code and comments
    function import( $filePath, $base = null, $key = 'libraries.' )
    {
        static $paths;
        if (!isset($paths)) {
              $paths = array();
              //assuming PHP 5 >= 5.1.2
              spl_autoload_register(array('JLoader', 'autoload'), true, true);
        }
//remove the __autoload function
php文件如下所示:

// no direct access 
defined('_JEXEC') or die; // Include dependancies 
jimport('joomla.application.component.controller');
//require_once(JPATH_LIBRARIES . '/doctrine/vendor/autoload.php');
require_once(JPATH_LIBRARIES . '/doctrine/bootstrap.php');
require_once(JPATH_LIBRARIES . '/doctrine/JoomlaDoctrineBootstrapper.php');
require_once(JPATH_COMPONENT.DS.'controller.php');
//$controller = new BugsController(JRequest::getVar('task', ''));
$controller = JController::getInstance('Bugs');
/public_html/components/com_bugs/bugs.php

<?php
// no direct access 
defined('_JEXEC') or die; // Include dependancies 
require_once(JPATH_LIBRARIES . '/doctrine/vendor/autoload.php');
require_once(JPATH_LIBRARIES . '/doctrine/bootstrap.php');
require_once(JPATH_LIBRARIES . '/doctrine/JoomlaDoctrineBootstrapper.php');
require_once(JPATH_COMPONENT.DS.'controller.php');


//using links like /index.php?option=com_bugs&format=text&task=save
// defaults to link so above is same as: http://joomla/index.php?option=com_bugs&format=text&task=save&router=link
$route=JRequest::getVar('router', 'Link');
$controllerName = 'bugsController'.$route;
//include the controller
include_once(dirname(__FILE__) . '/controllers/'.$route.".php");
$controller = new bugsControllerlink(JRequest::getVar('task', ''));
$controller->setEntityManager(bootstrapDoctrine());
$controller->execute(JRequest::getVar('task', ''));
$controller->redirect();

/**
 * Initialize doctrine by setting the entities and proxies locaties. Also define 
 * a default namespace for the proxies. 
 */
function bootstrapDoctrine() {
  $doctrineProxy = new JoomlaDoctrineBootstrapper(JoomlaDoctrineBootstrapper::APP_MODE_DEVELOPMENT);
  $doctrineProxy->setEntityLibrary(dirname(__FILE__) . '/models');
  $doctrineProxy->setProxyLibrary(dirname(__FILE__) . '/proxies');
  $doctrineProxy->setProxyNamespace('Joomla\Proxies');
  $doctrineProxy->setConnectionOptions(getConfigurationOptions());
  $doctrineProxy->bootstrap();
  return $doctrineProxy->getEntityManager();
}

function getConfigurationOptions() { // Define database configuration options 
  $joomlaConfig = JFactory::getConfig();
  return array('driver' => 'pdo_mysql', 'path' => 'database.mysql'
          , 'dbname' => $joomlaConfig->getValue("config.data.db")
          , 'user' => $joomlaConfig->getValue("config.data.user")
          , 'password' => $joomlaConfig->getValue("config.data.password"));
}   
?>

我猜当在/public\u html/components/com\u bugs/bugs.php中使用APP\u MODE\u PRODUCTION时,代码将被破坏,我不知道joomla,但文章中不是说您需要joomla 1.6而不是1.5吗?另外,你确定这篇文章与Doctrine2相关而不是Doctrine1吗?
<?php
// no direct access 
defined('_JEXEC') or die; // Include dependancies 
require_once(JPATH_LIBRARIES . '/doctrine/vendor/autoload.php');
require_once(JPATH_LIBRARIES . '/doctrine/bootstrap.php');
require_once(JPATH_LIBRARIES . '/doctrine/JoomlaDoctrineBootstrapper.php');
require_once(JPATH_COMPONENT.DS.'controller.php');


//using links like /index.php?option=com_bugs&format=text&task=save
// defaults to link so above is same as: http://joomla/index.php?option=com_bugs&format=text&task=save&router=link
$route=JRequest::getVar('router', 'Link');
$controllerName = 'bugsController'.$route;
//include the controller
include_once(dirname(__FILE__) . '/controllers/'.$route.".php");
$controller = new bugsControllerlink(JRequest::getVar('task', ''));
$controller->setEntityManager(bootstrapDoctrine());
$controller->execute(JRequest::getVar('task', ''));
$controller->redirect();

/**
 * Initialize doctrine by setting the entities and proxies locaties. Also define 
 * a default namespace for the proxies. 
 */
function bootstrapDoctrine() {
  $doctrineProxy = new JoomlaDoctrineBootstrapper(JoomlaDoctrineBootstrapper::APP_MODE_DEVELOPMENT);
  $doctrineProxy->setEntityLibrary(dirname(__FILE__) . '/models');
  $doctrineProxy->setProxyLibrary(dirname(__FILE__) . '/proxies');
  $doctrineProxy->setProxyNamespace('Joomla\Proxies');
  $doctrineProxy->setConnectionOptions(getConfigurationOptions());
  $doctrineProxy->bootstrap();
  return $doctrineProxy->getEntityManager();
}

function getConfigurationOptions() { // Define database configuration options 
  $joomlaConfig = JFactory::getConfig();
  return array('driver' => 'pdo_mysql', 'path' => 'database.mysql'
          , 'dbname' => $joomlaConfig->getValue("config.data.db")
          , 'user' => $joomlaConfig->getValue("config.data.user")
          , 'password' => $joomlaConfig->getValue("config.data.password"));
}   
?>
<?php

/** * Configuration class to integrate Doctrine into Joomla. * 
 * @author pderaaij <removed email, check link in question> */
use Composer\Autoload\ClassLoader,
    Doctrine\ORM\EntityManager,
    Doctrine\ORM\Configuration,
    Doctrine\Common\Cache\ArrayCache;
jimport( 'joomla.application.component.controller' );    
class JoomlaDoctrineBootstrapper extends JController{
  const APP_MODE_DEVELOPMENT = 1;
  const APP_MODE_PRODUCTION = 2;

  private $applicationMode;
  private $cache;
  private $entityLibrary;
  private $proxyLibrary;
  private $proxyNamespace;
  private $entityManager;
  private $connectionOptions;

  public function __construct($applicationMode=1) {
    $this->applicationMode = $applicationMode;
    $this->_name="bugs";
    parent::__construct();
  }
  public function getConnectionOptions() {
    return $this->connectionOptions;
  }
  public function setConnectionOptions($connectionOptions) {
    $this->connectionOptions = $connectionOptions;
  }
  public function getProxyLibrary() {
    return $this->proxyLibrary;
  }
  public function setProxyLibrary($proxyLibrary) {
    $this->proxyLibrary = $proxyLibrary;
  }
  public function getProxyNamespace() {
    return $this->proxyNamespace;
  }
  public function setProxyNamespace($proxyNamespace) {
    $this->proxyNamespace = $proxyNamespace;
  }
  public function getCache() {
    return $this->cache;
  }
  public function setCache($cache) {
    $this->cache = $cache;
  }
  public function getEntityLibrary() {
    return $this->entityLibrary;
  }
  public function setEntityLibrary($entityLibrary) {
    $this->entityLibrary = $entityLibrary;
  }
  public function getApplicationMode() {
    return $this->applicationMode;
  }
  public function setApplicationMode($applicationMode) {
    $this->applicationMode = $applicationMode;
  }
  public function getEntityManager() {
    return $this->entityManager;
  }
  public function setEntityManager($entityManager) {
    $this->entityManager = $entityManager;
  }
  /**   * Bootstrap Doctrine, setting the libraries and namespaces and creating * the entitymanager */
  public function bootstrap() {
    $this->registerClassLoader(); // Load cache 
    if ($this->getApplicationMode() == self::APP_MODE_DEVELOPMENT) {
      $this->cache = new ArrayCache;
    } else {
      $this->cache = new ApcCache;
    } /** @var $config Doctrine\ORM\Configuration */ $config = new Configuration;
    $config->setMetadataCacheImpl($this->cache);
    $driverImpl = $config->newDefaultAnnotationDriver($this->getEntityLibrary());
    $config->setMetadataDriverImpl($driverImpl);
    $config->setQueryCacheImpl($this->cache);
    $config->setProxyDir($this->getProxyLibrary());
    $config->setProxyNamespace($this->getProxyNamespace());
    if ($this->applicationMode == self::APP_MODE_DEVELOPMENT) {
      $config->setAutoGenerateProxyClasses(true);
    } else {
      $config->setAutoGenerateProxyClasses(false);
    } $this->entityManager = EntityManager::create($this->getConnectionOptions(), $config);
  }
  /**   * Register the different classloaders for each type. */
  private function registerClassLoader() { // Autoloader for all the Doctrine library files 
//Doctrine was done by public_html/libraries/doctrine/vendor/autoload.php
//    $classLoader = new ClassLoader('Doctrine', dirname(__FILE__) . '/');
//    $classLoader->register(); // Autoloader for all Entities 
//name of ComposerAutoloader is defined in /public_html/libraries/doctrine/vendor/composer/autoload_real.php
    $modelLoader = ComposerAutoloaderInit825f56ea1383e6b7fef7ea99c51fea36::getLoader();
    $modelLoader->set("Entities\\",dirname(__FILE__)."/../../components/com_"
//not sure how to do the proxies yet, have to check this with production settings
//    $proxiesClassLoader = new ClassLoader('Proxies', $this->getProxyLibrary());
//    $proxiesClassLoader->register();
  }
}
?>
  public function save() {
          //a textbox having the name 'json' or xhr post
      $link = JRequest::getVar('json',false,'post');
      if($link==false){
          return;
      }
      $link = json_decode($link);
      $newLink = new Link();
      $newLink->setId($link->id);
      $newLink->setName($link->name);
      foreach($link->categories as $category){
          $cat = new Category();
          $cat->setId($category->id);
          $cat->setName($category->name);
          $newLink->addCategorie($cat);
      }
      $this->em->persist($newLink);
      $this->em->flush();         
      return $link;
  }