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




Я действительно должен был иметь заявление
use App\Entity\User;
Наверху.
Без оператора use он ожидает класс в том же пространстве имен. Итак, в вашем пространстве имен App\Repository он ожидал App\Repository\User. Однако ваша IDE должна помочь с этим с помощью автозаполнения.
Спасибо за советы ребята.
Вам необходимо импортировать реальный путь класса User. С другой стороны, использование getClassName () в качестве условия нехорошо. Потому что подумайте о том, что у вас есть два класса с одинаковым именем в одном проекте [что очень часто]. Итак, это условие всегда будет возвращать истину?
Вместо этого вы можете (и должны) использовать "instance of".
if ($entity instance of Post::class) //Your logic
Рад, что у тебя все получилось. Похоже, ваша IDE обнаружила проблему.