学说更改生成实体上的名称空间



我正在使用laravel-doctrine。我在app/Models中使用"注释样式"创建了映射(但没有Getters和Setter(,现在想生成包括方法在内的实体。

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

因此,它覆盖我的映射,或者(如果我更新config/doctrine.php中的源路径(,它将在其他文件夹中生成实体,但保留与映射中指定的相同命名空间。这导致命名空间中的重复声明。

如何更改生成实体的命名空间?当前的方式实际上是一种用法疼痛。

我以这种方式入侵:

// config/doctrine.php
'paths' => [
   base_path('database/mappings')
],

database/mappings中创建具有注释样式的基本映射实体,但没有设定器和Getters。并且不要设置任何名称空间。如果您想扩展映射类,则需要使用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;

相关内容

  • 没有找到相关文章