Надеюсь, ты сможешь мне помочь. Я работаю с Symfony 3.4 на Linux. Когда я запускаю свое приложение, у меня появляется следующая ошибка:
Fatal error: Uncaught Doctrine\Common\Persistence\Mapping\MappingException: The class 'AppBundle\Entity\Job' was not found in the chain configured namespaces in /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php:37 Stack trace: #0 /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php(112): Doctrine\Common\Persistence\Mapping\MappingException::classNotFoundInNamespaces('AppBundle\Entit...', Array) #1 /var/www/html/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php(151): Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass('AppBundle\Entit...', Object(Doctrine\ORM\Mapping\ClassMetadata)) #2 /var/www/html/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php(332): Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata(Object(Doctrine\ORM\Mapping\ClassMetadata), NULL, false, Array) #3 /var/www/html/vendor/doctrine/orm/lib/Doctrine/ in /var/www/html/vendor/twig/twig/lib/Twig/Cache/Filesystem.php on line 57
Я создал объект с именем Job с помощью команды
php bin/console doctrine:generate:entity
Он без проблем создал объект и репозиторий. После этого я обновил базу данных
php bin/console doctrine:schema:update --force
Все идет нормально. Теперь приступаю к работе с контроллером:
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use AppBundle\Entity\Job;
use AppBundle\Entity\User;
use Symfony\Component\HttpFoundation\Response;
use Doctrine\ORM\EntityManagerInterface;
class DefaultController extends Controller
{
/**
* @Route("/", name = "homepage")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$job = new Job();
$job->setName('PHP');
$job->setDescription('Description');
$job->setCategory('IT');
$job->setLocation('London');
$em->persist($job);
$em->flush();
// replace this example code with whatever you need
return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);
}
}
Если я попытаюсь сбросить $ job до того, как продолжу то же самое, я получу результат как
object(AppBundle\Entity\Job)#242 (5) {
["id":"AppBundle\Entity\Job":private]=> NULL
["name":"AppBundle\Entity\Job":private]=> string(3) "PHP"
["description":"AppBundle\Entity\Job":private]=> string(11) "Description" ["category":"AppBundle\Entity\Job":private]=>
string(2) "IT" ["location":"AppBundle\Entity\Job":private]=>
string(6) "London" } job
С одной стороны, он говорит, что не может найти класс Job. С другой стороны, он хорошо создает объект.
Кто-нибудь знает, что происходит?
Пытался
php bin/console cache:clear php bin/console cache:warmup
Добавление класса вакансии
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Job
*
* @ORM\Table(name = "job")
* @ORM\Entity(repositoryClass = "AppBundle\Repository\JobRepository")
*/
class Job
{
/**
* @var int
*
* @ORM\Column(name = "id", type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name = "name", type = "string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name = "description", type = "string", length=255)
*/
private $description;
/**
* @var string
*
* @ORM\Column(name = "category", type = "string", length=255)
*/
private $category;
/**
* @var string
*
* @ORM\Column(name = "location", type = "string", length=255)
*/
private $location;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Job
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set description
*
* @param string $description
*
* @return Job
*/
public function setDescription($description)
{
$this->description = $description;
return $this;
}
/**
* Get description
*
* @return string
*/
public function getDescription()
{
return $this->description;
}
/**
* Set category
*
* @param string $category
*
* @return Job
*/
public function setCategory($category)
{
$this->category = $category;
return $this;
}
/**
* Get category
*
* @return string
*/
public function getCategory()
{
return $this->category;
}
/**
* Set location
*
* @param string $location
*
* @return Job
*/
public function setLocation($location)
{
$this->location = $location;
return $this;
}
/**
* Get location
*
* @return string
*/
public function getLocation()
{
return $this->location;
}
}
Попробуйте очистить кеш.
Почему вы использовали base_dir в рендере?
Просто дикая догадка, но я предполагаю, что вы пытаетесь использовать аннотации в некоторых из своих классов, но вы все еще сгенерировали файл сопоставления в разделе Resources / config / doctrine.
@SergeiKutanov Класс вакансии добавлен в основной пост. спасибо за помощь
Привет @Cerad. Что ты конкретно имеешь ввиду?. Я использую аннотации в своем классе (см. Основной пост). У меня нет AppBundle / Resources / config / doctrine. У меня есть AppBundle / Resources / doctrine / metadata / orm / Jobs.orm.xml Как я могу это исправить?
В Doctrine вы можете одновременно использовать только один тип сопоставления (yaml, xml или аннотацию). Полностью удалите каталог Resources / doctrine, очистите кеш и посмотрите, что произойдет. Или удалите аннотации из ваших объектов.






покажите свой класс AppBundle \ Entity \ Job, пожалуйста