Symfony 4: проблема пространства имен при создании сущностей с доктриной

Я в настоящее время использую 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.
Спасибо за помощь. (Любая ссылка может помочь мне)

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
2

Другие решения

Symfony 4 Src по умолчанию Приложение папка.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector