生成实体上的原则更改名称空间

时间:2019-05-23 14:34:54

标签: php laravel doctrine-orm

我正在使用Laravel-Doctrine。我在app/Models中使用“注释样式”创建了映射(但没有getter和setter),现在想生成包含方法的实体。

但是运行php artisan doctrine:generate:entities会为生成的实体保留相同的名称空间。

因此,它要么覆盖我的映射,要么(如果我更新config/doctrine.php中的源路径)则在另一个文件夹中生成实体,但保留与映射中指定的名称空间相同的名称空间。这会导致在命名空间中重复声明。

如何更改生成实体的名称空间?当前的方法实际上是使用上的痛苦。

1 个答案:

答案 0 :(得分:0)

我是这样入侵的:

// config/doctrine.php

'paths' => [
   base_path('database/mappings')
],

使用database/mappings中的注释样式创建基本映射实体,但不使用设置方法和获取方法。并且不要设置任何名称空间。如果您想扩展映射类,则需要使用require_once()来导入它。

然后运行:

php artisan doctrine:generate:entities --generate-annotations --generate-methods --regenerate-entities

这将在app/Entities中生成完整实体。运行自定义清理脚本后,将命名空间声明插入到生成的实体中。

php -f database/mapping-tools/clear-entity-namespace.php

文件:clear-entity-namespace.php

<?php

$targetDir = 'app/Entities';
$files = scandir($targetDir);
array_shift($files); // remove .
array_shift($files); // remove ..

foreach ($files as $file) {
   echo '> File: ' . $file . PHP_EOL;
   $path = $targetDir . '/' . $file;
   $content = file_get_contents($path);

   $newHeader = '<?php ' . PHP_EOL . PHP_EOL . 'namespace Entities;';
   $content = str_replace('<?php', $newHeader, $content);
   file_put_contents($path, $content);
}

echo '>>> Cleanup complete' . PHP_EOL;