Php Symfony 4:使用条令生成实体时的命名空间问题

Php Symfony 4:使用条令生成实体时的命名空间问题,php,symfony,namespaces,doctrine,entity,Php,Symfony,Namespaces,Doctrine,Entity,我目前正在使用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

我目前正在使用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;
...
#src/Entity/User.php
我找到了解决办法:

1) 你必须要求通过

composer require doctrine maker
2) 您希望通过下面的命令创建实体,但请确保实现第3步和第4步。然后回到这里。然后你可以进入第五步

3) 在第150行和第170行之间转到“供应商/doctrine/doctrine bundle/Mapping/DisconnecteMetadataFacroty.php”。然后在“///”斜杠之间添加条件

#/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) 在第367行和第375行之间转到“供应商/doctrine/orm/lib/doctrine/orm/Tools/EntityGenerator.php”。然后将注释行替换为以下两行

#/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 4Src是默认的应用程序文件夹。

Composer还遵守Composer\u memory\u limit环境变量定义的内存限制。 您可以将其设置为
COMPOSER\u MEMORY\u LIMIT=-1
,然后运行:

composer require doctrine maker

检查Symfony 4中的

使用“bin/console make:entity User”可能需要安装带有“composer require maker”的新maker bundle,是的,S4中有很多小改动。我想这会回答您的问题。谢谢Cerad,但很遗憾。我用这个命令创建了我的实体(带有ORM注释的实体)。谢谢dlondero。我将遵循我在这个URL中找到的内容:创建一个symfony 3.3安装原则:映射:从现有数据库导入复制并粘贴新的symfony 4项目中的实体文件(在将“AppBundle”更改为每个项目中的“App”后)原则:模式:更新——如果需要使用现有数据库,则在新的symfony 4项目中强制是有意义的。如果您这样做只是为了自动创建getter/setter,那么您可以使用适当的IDE实现这一点。应该避免修改供应商代码,当软件包有任何更新时,它将被替换。
composer require doctrine maker