(Symfony 4) Функция ожидает класс репозитория, когда я настроил ее на ожидание класса сущности

Я разрабатываю базовый сайт социальной сети, и когда я пытаюсь вызвать функцию в моем репозитории (например, Exists), она запускает экземпляр App \ Repository \ User вместо ожидания экземпляра App \ Entity \ User, хотя я Я четко настраиваю функцию для ожидания объекта, а не репозитория.

Вот код, ведущий к моему вызову функции:

/**
 * @param $likeData
 */
public function addLike($likeData)
{
    $em = $this->getEntityManager();

    $userId = $likeData['userId'];
    /** @var User $user */
    $user = $this->userRepository->find($userId);

    $entityType = $likeData['entityType'];
    $likeType = $likeData['likeType'];

    $likeToAdd = new UserLike();
    $likeToAdd->setUser($user);
    $likeToAdd->setType($likeType);

    $likeAdded = true;

    switch ($likeType) {
        case UserLike::ENTITY_TYPE_POST:
            $postId = $likeData['entityId'];
            $post = $this->postRepository->find($postId);
            if ($this->likeExists($post, $likeType, $user))

Вот функция:

/**
 * @param $entity
 * @param $likeType
 * @param User $user
 */
public function likeExists($entity, $likeType, User $user)
{
    $em = $this->getEntityManager();

    if ($entity->getClassName == 'Post')
    {
        $like = $em->findBy(
            ['user' => $user],
            ['type' => $likeType],
            ['post' => $entity]
            );
    }

Я четко настраиваю его на ожидание объекта User, а не объекта UserRepository.

Я получаю следующую ошибку:

Аргумент 3, переданный в App \ Repository \ UserLikeRepository :: likeExists (), должен быть экземпляром App \ Repository \ User, заданным экземпляром App \ Entity \ User

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
37
2

Ответы 2

Я действительно должен был иметь заявление

use App\Entity\User;

Наверху.

Рад, что у тебя все получилось. Похоже, ваша IDE обнаружила проблему.

Cerad 09.01.2019 04:00

Без оператора use он ожидает класс в том же пространстве имен. Итак, в вашем пространстве имен App\Repository он ожидал App\Repository\User. Однако ваша IDE должна помочь с этим с помощью автозаполнения.

Etshy 09.01.2019 09:11

Спасибо за советы ребята.

Brent Heigold 09.01.2019 19:16

Вам необходимо импортировать реальный путь класса User. С другой стороны, использование getClassName () в качестве условия нехорошо. Потому что подумайте о том, что у вас есть два класса с одинаковым именем в одном проекте [что очень часто]. Итак, это условие всегда будет возвращать истину?

Вместо этого вы можете (и должны) использовать "instance of".

if ($entity instance of Post::class) //Your logic

Другие вопросы по теме