У меня есть проблема с моей доктриной в течение недели, и я не могу найти решение.
Вот моя архитектура:
- 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.
Может кто-нибудь сказать мне, где моя ошибка?