Что это за ошибка, которую я получаю, когда пытаюсь хешировать свой пароль в symfony 4

Это ошибка

Argument 1 passed to Symfony\Component\Security\Core\Encoder\UserPasswordEncoder::encodePassword() must be an instance of Symfony\Component\Security\Core\User\UserInterface, instance of App\Entity\User given, called in C:\Users\willi\Desktop\Crowdin\src\Controller\CompteController.php on line 44

CompteController.php:

  /** 
 * @Route("/inscriptions", name = "inscription")
 */
public function inscriptions(Request $request, ObjectManager $manager, UserPasswordEncoderInterface $encoder) {
    $user = new User();

    $form = $this->createForm(RegistrationType::class, $user);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $hash = $encoder->encodePassword($user, $user->getPassword());

        $user->setPassword($hash);

        $manager->persist($user);
        $manager->flush();

        return $this->redirectToRoute('login');
    }

    return $this->render('compte/inscriptions.html.twig', [
        'form' => $form->createView()
    ]);
}

User.php:

<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass = "App\Repository\UserRepository")
 * @UniqueEntity(
 *  fields = {"email"},
 *  message = "L'email que vous avez indiqué est déja utilisé !"
 * )
 */
class User implements UserInterface
{
App\Entity\User должен либо реализовывать Symfony\Component\Security\Core\User\UserInterface, либо дочерний интерфейс, либо расширять класс, который это делает.
Sammitch 08.01.2019 22:00

я уже делаю это

NoRage 08.01.2019 22:02

вам нужно мое приложение \ entity \ User?

NoRage 08.01.2019 22:05

Вы уверены, что реализовали правильный UserInterface? Что говорит var_dump($user instanceof Symfony\Component\Security\Core\User\UserInterface)?

jrswgtr 08.01.2019 22:08

что сказать ложь.

NoRage 08.01.2019 22:11

Как вы это реализовали?

Ibu 08.01.2019 22:12

Используйте Symfony \ Component \ Security \ Core \ User \ UserInterface в моем объекте User.php

NoRage 08.01.2019 22:15

Это еще не все.

Don't Panic 08.01.2019 22:17

Продолжайте и обновите свой вопрос, указав свой код пользователя. Не нужно все это показывать. Просто класс User реализует строку UserInterface.

Cerad 08.01.2019 22:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
9
433
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы только импортируете интерфейс в локальное пространство имен, но на самом деле не реализуете его.

namespace foo;         // namespace declaration
use Bar\UserInterface; // namespace import, does not actually implement it.

class User implements UserInterface { // <- this is the important part
  // now you need to implement the methods specified in the interface.
}

В качестве альтернативы, предполагая, что класс Bar\User реализует Bar\UserInterface:

class User extends Bar\User {
  // now you only need to define/redefine the specific things that you want to
}

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