(Symfony 4) Функция, ожидающая класс репозитория, когда я настроил его для ожидания класса сущности - PullRequest
0 голосов
/ 09 января 2019

Я занимаюсь разработкой базового сайта социальной сети, и когда я пытаюсь вызвать функцию в моем репозитории (например, 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 данного

Ответы [ 2 ]

0 голосов
/ 09 января 2019

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

Вместо этого вы можете (и должны) использовать «экземпляр».

if ($entity instance of Post::class) //Your logic
0 голосов
/ 09 января 2019

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

use App\Entity\User;

Вверху.

...