2016-07-11 4 views
0

Ich habe ein Problem, wenn ich versuche, ein benutzerdefiniertes Entitäts-Repository zu erstellen.Silex DoctrineORM: Benutzerdefiniertes Entitäts-Repository

"PHP message: PHP Fatal error: Class 'Doctrine\Orm\EntityRepository' not found in /home/user/projects/app/src/Application/Database/EntityRepository/UserRepository.php on line 8 

In der CustomRepository.php Datei Ich habe dies getan:

<?php 
    namespace Application\Database\EntityRepository; 

    use Application\Bootstrap as Bootstrap; 
    use Doctrine\Orm\EntityRepository; 

    class UserRepository extends \Doctrine\Orm\EntityRepository 
    { 

     public function getPasswordByUsername($username) 
     { 
      $query = $app['orm.em']->createQuery('SELECT u.password FROM Application\Database\Entities\Users u WHERE (u.username = :username)'); 
      $query->setParameter('username', $username); 

      return $query->getOneOrNullResult(); 
     } 
    } 

Und dann in meiner Bootstrap-Datei wird diese Methode durch einen Konstruktor in der Bootstrap-Klasse geladen.

use Silex\Provider\DoctrineServiceProvider as silexDocProv; 
use Silex\Provider\SessionServiceProvider as silexSessProv; 
use Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider as docProv; 

private function initDatabase() 
{ 
    $this->app->register(new silexDocProvj(), array(
     'db.options' => array(
      'driver' => 'pdo_mysql', 
      'host'  => getenv('DBHOST'), 
      'dbname' => getenv('DBNAME'), 
      'user'  => getenv('DBUSER'), 
      'password' => getenv('DBPASS') 
     ) 
    )); 

    $this->app->register(new docProv(), array(
     'orm.em.options' => array(
      'mappings' => array(
       array(
        'type' => 'yml', 
        'namespace' => 'Application\Database\Entities', 
        'path' => __DIR__ . '/../../app/Config/Mappings' 
       ) 
      ) 
     ) 
    )); 
} 

Und schließlich meine Zuordnungsdatei hat dies:

Application\Database\Entities\Users: 
    type: entity 
    table: users 
    repositoryClass: \Application\Database\EntityRepository\UserRepository 

Antwort

0

Namensräume sind case-sensitive.

ändern

Doctrine\Orm\EntityRepository 

zu:

Doctrine\ORM\EntityRepository 

Auch gibt es keine Notwendigkeit für die vollständige Namensraum in

extends \Doctrine\Orm\EntityRepository 

, weil Sie die Klasse von

importiert haben
use Doctrine\ORM\EntityRepository; 

so jetzt können Sie nur tun:

extends EntityRepository