Я в настоящее время использую Symfony 4.
Я написал сущность с ORM и аннотациями
#src/Entity/User.php
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
*
* User
*
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
*/
class User
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255, unique=true)
*/
private $email;
/**
* @ORM\Column(type="string", length=255)
*/
private $motdepasse;
/**
* @ORM\Column(type="string", length=255, unique=true)
*/
private $username;
/**
* @ORM\Column(type="string", length=255)
*/
private $nom;
...
Я генерирую сущность используя «php bin / console doctrine: generate: entity App \ Entity \ User». К сожалению, он генерирует сущность в php-файле «src / App / Entity / User.php» с пространством имен «App \ Entity». Однако пространство имен должно быть «App \ App \ Entity» из-за правил psr-4. Если я добавлю второе «приложение», у меня возникнут проблемы, связанные с хранилищем и консольными поколениями. Если я оставлю одно «Приложение», Symfony думает, что пространство имен неправильное.
Это моя конфигурация сервиса:
конфиг / services.yml
Это моя доктрина конфигурации:
конфигурации / пакеты / doctrine.yml
Я искал ответы в течение 2 дней везде (документация, учебные пособия, stackoverflow, …). Symfony 4 действительно изменился по сравнению с Symfony 3.
Спасибо за помощь. (Любая ссылка может помочь мне)
Я нашел решение:
1) Вы должны требовать от доктрины через
composer require doctrine maker
2) Вы хотели бы создать сущности с помощью этой команды ниже, но не забудьте выполнить 3-й и 4-й этапы. Тогда возвращайся сюда. Тогда вы можете перейти к шагу № 5
php bin/console make:entity YourEntity
3) Перейти к ‘ поставщик / доктрина / Доктрина-расслоение / Mapping / DisconnecteMetadataFacroty.phpмежду 150-й и 170-й линиями. Затем добавьте условие между косыми чертами ///
#/vendor/doctrine/doctrine-bundle/mapping/disconnectedMetadataFactory.php
private function getBasePathForClass($name, $namespace, $path)
{
$namespace = str_replace('\\', '/', $namespace);
$search = str_replace('\\', '/', $path);
$destination = str_replace('/'.$namespace, '', $search, $c);
///
if ($namespace === 'App/Entity') {
$destination = str_replace('/Entity', '', $search, $c);
} else {
$destination = str_replace('/'.$namespace, '', $search, $c);
}
////if ($c != 1) {
throw new \RuntimeException(sprintf('Can\'t find base path for "%s" (path: "%s", destination: "%s").', $name, $path, $destination));
}
return $destination;
}
4) Перейти к ‘ продавец / Доктрина / ОРМ / Lib / Doctrine / ОРМ / Инструменты / EntityGenerator.phpмежду 367-й и 375-й линиями. Затем замените закомментированную строку двумя следующими.
#/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/EntityGenerator.php
/*$path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metadata->name) . $this->extension;*/
$metaNamePath = substr($metadata->name, 0, 4) === 'App\\' ? substr($metadata->name, 4) : $metadata->name;
$path = $outputDirectory . '/' . str_replace('\\', DIRECTORY_SEPARATOR, $metaNamePath) . $this->extension;
5) Здесь вы можете генерировать геттеры и сеттеры через
php bin/console doctrine:generate:entities App:YourEntity
Symfony 4 Src по умолчанию Приложение папка.