我目前正在使用Symfony 4。 我用ORM和annotions编写了一个实体
#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;
...
我使用&#34; php bin / console doctrine生成实体:generate:entities App \ Entity \ User&#34;。不幸的是,它在php文件中生成一个实体&#34; src / App / Entity / User.php&#34;使用命名空间&#34; App \ Entity&#34;。但是命名空间应该是&#34; App \ App \ Entity&#34;因为psr-4规则。如果我添加第二个&#34; App&#34;,我会遇到与存储库和控制台生成相关联的问题。如果我让#34; App&#34;,Symfony认为命名空间是错误的。 这是我的服务配置: config/services.yml 这是我的学说配置: config/packages/doctrine.yml
我到处寻找了2天的答案(文档,教程,stackoverflow,......)。与Symfony 3相比,Symfony 4确实发生了变化。 谢谢您的帮助。 (任何链接都可以帮助我)
答案 0 :(得分:1)
我找到了解决方案:
1)您必须通过
要求学说制造者composer require doctrine maker
2)您想通过以下命令创建实体,但请确保实现第3步和第4步。然后回到这里。然后你可以进入第5步
php bin/console make:entity YourEntity
3)转到&#39;的 供应商/教义/学说束/映射/ DisconnecteMetadataFacroty.php 强>&#39;在第150和第170行之间。然后在&#39; ///&#39;之间添加条件。斜线
#/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)转到&#39;的 供应商/教义/ ORM / LIB /学说/ ORM /工具/ EntityGenerator.php 强>&#39;在第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)在这里,您可以通过
生成getter和setterphp bin/console doctrine:generate:entities App:YourEntity
答案 1 :(得分:0)
Symfony 4 Src 是默认的 App 文件夹。
答案 2 :(得分:0)
Composer还遵守由COMPOSER_MEMORY_LIMIT环境变量定义的内存限制。
您可以将其设置为COMPOSER_MEMORY_LIMIT=-1
,然后运行:
composer require doctrine maker
选中https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors