我正在为Symfony构建一个简单的软件包,我想知道我是否可以运行位于其中的夹具,因为它不在项目src
根文件夹中。
这是我的项目结构:
Project
|
+--AdminBundle <- My custom bundle
| +--Controller
| +--DataFixtures
| | |
| | +--AdminFixtures.php <- The fixtures I want to run
| |
| +--DependencyInjection
| +--Entity
| +--Resources
|
+--assets
+--bin
+--config
+--public
+--src
+--templates
+--vendor
这是AdminFixtures.php的代码
namespace ExampleVendor\AdminBundle\DataFixtures;
use App\AdminBundle\Entity\User;
use App\AdminBundle\Entity\Profile;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Bundle\FixturesBundle\ORMFixtureInterface;
use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class AdminFixtures extends Fixture implements FixtureGroupInterface {
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder) {
$this->passwordEncoder = $passwordEncoder;
}
public function load(ObjectManager $manager) {
// Fixtures stuff
}
/**
* This method must return an array of groups
* on which the implementing class belongs to
*
* @return string[]
*/
public static function getGroups(): array {
return ['admin'];
}
}
当我运行php bin/console doctrine:fixtures:load
时
我收到一条错误消息:
[错误]找不到要加载的夹具服务。
我读到一些内容,每个实现FixtureGroupInterface
的类都将自动注册为fixture,但是我认为这是行不通的,因为我在这里大声疾呼。
如何手动将其注册为灯具?如何使php bin/console doctrine:fixtures:load
命令起作用?
答案 0 :(得分:1)
我不太了解DoctrineFixtures捆绑包,因此最终可能会使用实现某个接口的每个 loaded 类,但我想只有在确保该类之外的类时才有可能src目录已加载,请查看您的 composer.json ,其中应包含以下内容:
................
"autoload": {
"psr-4": {
"": "src/",
}
},
,然后考虑添加类似的内容: (假设您使用“ Admin \”作为AdminBundle中类的名称空间)
................
"autoload": {
"psr-4": {
"": "src/",
"Admin\\": "AdminBundle/",
}
},
此外,认识symfony的人最终会纠正我,但我不确定您是否应该再创建这样的捆绑包。 Admin是应用程序的一个模块,您将其放在src / Admin中,还是考虑在其他地方重用它,并将其作为适当的库放入您的供应商中?