首页 > 解决方案 > 无法识别 ObjectManager(声明必须与 FixtureInterface->load 兼容)

问题描述

我试图创建 DataFixtures,我认为我的代码是正确的,因为如果我尝试另一个项目,它就可以工作。所以我不明白为什么在我的实际项目中,对象管理器不起作用,而我的 IDE 是底层对象管理器。

我的错误:

Declaration must be compatible with FixtureInterface->load(manager: \Doctrine\Persistence\ObjectManager)

我的代码:

<?php

namespace App\DataFixtures;

use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class UserFixtures extends Fixture
{
    public function __construct(UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->passwordEncoder =$passwordEncoder;
    }

    public function load(ObjectManager $manager)
    {
        foreach ($this->getUserData() as [$email,$password,$lastname,$firstname,$company,$language,$enabled,$pictures])
        {
            $user = new User();
            $user->setEmail($email);
            $user->setPassword($this->passwordEncoder->encodePassword($user,$password));
            $user->setLastname($lastname);
            $user->setFirstname($firstname);
            $user->setCompany($company);
            $user->setLanguage($language);
            $user->setEnabled($enabled);
            $user->setPictures($pictures);

        }
        $manager->flush();
    }

    private function getUserData() : array {
        return [
            ['test@gmail.com','test','paul','marc','WKCompany','BE',1,'https://media.istockphoto.com/photos/businessman-silhouette-as-avatar-or-default-profile-picture-picture-id476085198?k=6&m=476085198&s=612x612&w=0&h=5cDQxXHFzgyz8qYeBQu2gCZq1_TN0z40e_8ayzne0X0=']
        ];
    }
}

标签: phpsymfonysymfony4

解决方案


它看起来很简单的类型错误。我只更改了 ObjectManager 命名空间。

use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class UserFixtures extends Fixture
{
    public function __construct(UserPasswordEncoderInterface $passwordEncoder)
    {
        $this->passwordEncoder =$passwordEncoder;
    }

    public function load(ObjectManager $manager)
    {
        foreach ($this->getUserData() as [$email,$password,$lastname,$firstname,$company,$language,$enabled,$pictures])
        {
            $user = new User();
            $user->setEmail($email);
            $user->setPassword($this->passwordEncoder->encodePassword($user,$password));
            $user->setLastname($lastname);
            $user->setFirstname($firstname);
            $user->setCompany($company);
            $user->setLanguage($language);
            $user->setEnabled($enabled);
            $user->setPictures($pictures);

        }
        $manager->flush();
    }

    private function getUserData() : array {
        return [
            ['test@gmail.com','test','paul','marc','WKCompany','BE',1,'https://media.istockphoto.com/photos/businessman-silhouette-as-avatar-or-default-profile-picture-picture-id476085198?k=6&m=476085198&s=612x612&w=0&h=5cDQxXHFzgyz8qYeBQu2gCZq1_TN0z40e_8ayzne0X0=']
        ];
    }
}

推荐阅读