Php Symfony 4:使用条令生成实体时的命名空间问题
我目前正在使用Symfony 4。 我已经用ORM和注释编写了一个实体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
#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