CI3 + D2.6 - Доктрина не загружает мои сущности - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть проблема с моей доктриной в течение недели, и я не могу найти решение.

Вот моя архитектура:

  • mySite / src / config / autoload.php
  • mySite / src / controllers / HomeController.php
  • mySite / src / library / Doctrine.php
  • mySite / src / models / Entities / News.php

autoload.php

$autoload['libraries'] = array('Twig', 'Email', 'Doctrine');

HomeController.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class HomeController extends CI_Controller {

  /**
   * main method
   */
  public function index()
  {
      $em = $this->doctrine->em;
      $listNews = $em->getRepository('News');

      $this->twig->display('main/home/home.html.twig', array());
  }
}

Doctrine.php

    <?php
    use Doctrine\Common\ClassLoader,
    Doctrine\ORM\Configuration,
    Doctrine\ORM\EntityManager,
    Doctrine\Common\Cache\ArrayCache,
    Doctrine\DBAL\Logging\EchoSQLLogger;

    class Doctrine {

      public $em = null;

      public function __construct()
      {
        // load database configuration from CodeIgniter
        require_once APPPATH.'config/database.php';

        // Set up class loading. You could use different autoloaders, provided by your favorite framework,
        // if you want to.

        $doctrineClassLoader = new ClassLoader('Doctrine',  APPPATH.'libraries');
        $doctrineClassLoader->register();
        $entitiesClassLoader = new ClassLoader('Entity', APPPATH.'models');
        $entitiesClassLoader->register();
        $proxiesClassLoader = new ClassLoader('Proxies', APPPATH.'models/proxies');
        $proxiesClassLoader->register();

        // Set up caches
        $config = new Configuration;
        $cache = new ArrayCache;
        $config->setMetadataCacheImpl($cache);
        $driverImpl = $config->newDefaultAnnotationDriver(array(APPPATH.'models/Entities'));
        $config->setMetadataDriverImpl($driverImpl);
        $config->setQueryCacheImpl($cache);

        $config->setQueryCacheImpl($cache);

        // Proxy configuration
        $config->setProxyDir(APPPATH.'/models/proxies');
        $config->setProxyNamespace('Proxies');

        // Set up logger
        $logger = new EchoSQLLogger;
        $config->setSQLLogger($logger);

        $config->setAutoGenerateProxyClasses( TRUE );

        // Database connection information
        $connectionOptions = array(
            'driver' => 'pdo_mysql',
            'user' =>     $db['default']['username'],
            'password' => $db['default']['password'],
            'host' =>     $db['default']['hostname'],
            'dbname' =>   $db['default']['database']
        );

        // Create EntityManager
        $this->em = EntityManager::create($connectionOptions, $config);
    }
  }

News.php

<?php
namespace Entity;

/**
 * Created by PhpStorm.
 * User: laurent P.
 * Date: 17/11/2018
 * Time: 00:36
 */

/**
 * @Entity
 * @Table(name="News")
 */
class News
{
    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    private $id;

    /**
     * @var string
     * @Column(type="string", length=100)
     */
    private $title;

    /**
     * @var string
     * @Column(type="string", length=4000)
     */
    private $content;

    /**
     * @Column(type="datetime")
     */
    private $createdDate;

    /**
     * @Column(type="datetime")
     */
    private $updatedDate;

    /**
     * @return mixed
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @param mixed $id
     * @return News
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    /**
     * @return mixed
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * @param mixed $title
     * @return News
     */
    public function setTitle($title)
    {
        $this->title = $title;
        return $this;
    }

    /**
     * @return mixed
     */
    public function getContent()
    {
        return $this->content;
    }

    /**
     * @param mixed $content
     * @return News
     */
    public function setContent($content)
    {
        $this->content = $content;
        return $this;
    }

    /**
     * @return mixed
     */
    public function getCreatedDate()
    {
        return $this->createdDate;
    }

    /**
     * @param mixed $createdDate
     * @return News
     */
    public function setCreatedDate($createdDate)
    {
        $this->createdDate = $createdDate;
        return $this;
    }

    /**
     * @return mixed
     */
    public function getUpdatedDate()
    {
        return $this->updatedDate;
    }

    /**
     * @param mixed $updatedDate
     * @return News
     */
    public function setUpdatedDate($updatedDate)
    {
        $this->updatedDate = $updatedDate;
        return $this;
    }

}

И вот что я получаю:

Обнаружено необработанное исключение

Тип: Doctrine \ Common \ Persistence \ Mapping \ MappingException

Сообщение: Класс 'News' не существует

Имя файла: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine\ persistence \ lib \ Doctrine \ Common \ Persistence \ Mapping \ MappingException.php

Номер строки: 93

Обратный след:

Файл: C: \ wamp64 \ www \ cubasanga\ поставщика \ доктрина \ живучесть \ Lib \ Doctrine \ Common \ Persistence \ Mapping \ RuntimeReflectionService.php Строка: 24 Функция: не существующий класс

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \ persistence \ lib \ Doctrine \ Common \ Persistence \ Mapping \ AbstractClassMetadataFactory.php Строка: 251 Функция: getParentClasses

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \ persistence \ lib \ Doctrine \ Common \ Persistence \ Mapping \ AbstractClassMetadataFactory.php Строка: 284 Функция: getParentClasses

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Mapping \ ClassMetadataFactory.php Строка: 78 Функция: loadMetadata

Файл: C: \ wamp64 \www \ cubasanga \ vendor \ doctrine \ persistence \ lib \ Doctrine \ Common \ Persistence \ Mapping \ AbstractClassMetadataFactory.php Строка: 183 Функция: loadMetadata

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \orm \ lib \ Doctrine \ ORM \ EntityManager.php Строка: 283 Функция: getMetadataFor

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Repository \ DefaultRepositoryFactory.php Строка: 44 Функция: getClassMetadata

Файл: C: \ wamp64 \ www \ cubasanga \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ EntityManager.php Строка: 713 Функция: getRepository

Файл: C: \ wamp64 \ www \ cubasanga \ src \ controllers \ HomeController.php Строка: 12 Функция: getRepository

Файл: C: \ wamp64 \ www \ cubasanga \ index.php Строка: 316Функция: require_once

Я перепробовал все, и я не понимаю, почему мои сущности не загружаются.Думаю, проблема в ClassLoader.

Может кто-нибудь сказать мне, где моя ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...