2016-06-29 3 views
1

Я хотел использовать Doctrine в своем проекте, но я не могу использовать Entity Manager. Я создал entites, репозитории, файлы конфигурации и dbconnect, но кажется, что это сделано неправильно. Не могли бы вы проверить этот код? Может, мне не хватает чего-то действительно маленького.Не удается включить администратор сущности доктрины

Мой файл БДСВЯЗЬ (он загрузился в init.php):

<?php 
namespace Projekt\Config; 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

$paths = array("Entity"); 
$isDevMode = false; 

// the connection configuration 
$dbParams = array(
'driver' => 'pdo_mysql', 
'user'  => 'root', 
'password' => '', 
'dbname' => 'projekt', 
); 

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false); 
$em = EntityManager::create($dbParams, $config); 

Мой Repository пример:

<?php 

namespace Projekt\Repository; 

use Doctrine\ORM\EntityRepository; 

/** 
* Message 
* 
* This class was generated by the Doctrine ORM. Add your own custom 
* repository methods below. 
*/ 
class Message extends EntityRepository 
{ 
    public function getMessage($id) 
    { 
     $message = $this->find($id); 
     return $message; 

    } 
    public function getAllMessages() 
    { 

    } 
    public function createMessage() 
    { 

    } 
    public function updateMessage() 
    { 

    } 
    public function deleteMessage() 
    { 

    } 
} 

Теперь, когда я пытаюсь получить доступ по умолчанию или метод ввода пользовательского хранилища получить эту ошибку:

Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::__construct(), 
called in F:\xampp\htdocs\mvc\app\Controllers\Messages.php 
on line 15 and defined in F:\xampp\htdocs\mvc\vendor\doctrine\orm\lib\Doctrine\ORM\EntityRepository.php on line 64 

линии 64 в EntityRepository.php является функцией __construct, объявляющий EntityManager, но это, кажется, не работает должным образом:

public function __construct($em, Mapping\ClassMetadata $class) 
{ 
    $this->_entityName = $class->name; 
    $this->_em   = $em; 
    $this->_class  = $class; 
} 

ответ

0

Две вещи, которые я заметил:

  1. Ваш путь является относительным. Я не уверен, но всегда использую полный путь к папке Entity. Вы можете использовать __DIR__ для достижения этого легко. В зависимости от вашего пространства имен он должен выглядеть следующим образом:

    $paths = array(__DIR__ . "/../Repository");

Доктрина должна знать, где найти свои сущности и хранилища. В зависимости от вашего пространства имен я думаю, что ваш файл репозитория существует в папке с именем «Репозиторий», а не «Сущность».

  1. Вы правильно определили Entity Class? Класс Repository выглядит нормально для меня, но он может работать, только если у вас есть действительный класс Entity.

Вы не должны называть свое хранилище «Сообщение». Объект должен иметь имя «Сообщение», а репозиторий должен иметь имя «MessageRepository».

Смежные вопросы