Symfony2.1 mapping error: class_parents()
doctrine, orm, php, symfony-2.1
Solution
Symfony follows the PSR-0 standard for filenames. That, amongst other things, means that if you use an underscore in your class name, it will replace it with a directory separator when deciding where your class should live, like this:
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
So, if you have a class named SYS_TCountry it would expect to find it in
Company/Project/BaseBundle/Entity/SYS/TCountry.php
instead of
Company/Project/BaseBundle/Entity/SYS_TCountry.php
I think that your best solution would be to change the filename and class name to SYSTCountry. You don´t need to change the table name.
Problem
I have a problem trying to get data from a table (via entity) using Doctrine2 in a Symfony2.1 project. Here is the controller where I get the error: ``` /** * Country list */ public function countrylistAction() { $em = $this->getDoctrine()->getManager(); $countryList = $em->getRepository('ProjectBaseBundle:SYS_TCountry') ->findAll(); $serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder())); return new Response($serializer->serialize($countryList, 'json')); } ``` The entity: ``` <?php namespace Company\Project\BaseBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity * @ORM\Table(name="SYS_TCountry") */ class SYS_TCountry { /** * @ORM\Id * @ORM\Column(type="string", length=3, nullable=false) * @var string */ protected $idcountry; /** * @ORM\Column(type="string", length=75, nullable=false) * @Assert\NotBlank() * @var string */ protected $name; .... public function getIdcountry() { return $this->idcountry; } public function getName() { return $this->name; } public function getA2() { return $this->a2; } public function getA3() { return $this->a3; } public function getIdstatus() { return $this->idstatus; } public function setIdcountry($idcountry) { $this->idcountry = $idcountry; } public function setName($name) { $this->name = $name; } public function setA2($a2) { $this->a2 = $a2; } public function setA3($a3) { $this->a3 = $a3; } public function setIdstatus($idstatus) { $this->idstatus = $idstatus; } public function __toString() { return $this->idcountry; } } ``` Config.yml: ``` # Doctrine Configuration doctrine: dbal: driver: %database_driver% host: %database_host% port: %database_port% dbname: %database_name% user: %database_user% password: %database_password% charset: UTF8 orm: auto_generate_proxy_classes: %kernel.debug% auto_mapping: true ``` And this is the error: ``` Warning: class_parents(): Class Company\Project\BaseBundle\Entity\SYS_TCountry does not exist and could not be loaded in /var/www/project/src/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php line 40 ``` It is strange because, as Doctrine says in console, the mapping is properly done: I test it executing php app/console doctrine:mapping:info: ``` [OK] Company\Project\BaseBundle\Entity\SYS_TCountry ``` and if I execute a query in console everything goes fine -> app/console doctrine:query:sql 'SELECT * FROM SYS_TCountry', that return results. I do not know if using Symfony2.1 I have to configure something different to the 2.0 version, but seems the same because the mapping is Doctrine responsibility.