Невозможно войти из-за ограничения внешнего ключа между двумя таблицами

У меня есть две таблицы «Пользователь» и «Адрес», между ними существует отношение OneToOne, поскольку Таблица пользователя имеет столбец «address_id». ', в котором хранится 'id' таблицы адресов.

Вот аннотация в User Entity:

/**
     * @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
     * @ORM\JoinColumn(nullable=false)
     */
    private $address;

Безопасность.yaml:

security:
    encoders:
        App\Entity\User:
            algorithm: bcrypt

    providers:
        my_provider:
            entity:
                class: App\Entity\User
                property: username
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true

            form_login:
                login_path: login
                check_path: login
                provider: my_provider
                default_target_path: dashboard

            logout:
                path: /logout
                target: /

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY  }
        - { path: ^/dashboard, roles: ROLE_USER }

Контроллер:

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;

class SecurityController extends AbstractController
{
    /**
     * @Route("/login", name="login")
     */
    public function login(Request $request,AuthenticationUtils $utils)
    {
        // get the login error if there is one
        $error = $utils->getLastAuthenticationError();
        // dump($error);die;

        // last username entered by the user
        $lastUsername = $utils->getLastUsername();
        return $this->render('security/login.html.twig', [
            'last_username' => $lastUsername,
            'error' => $error
            ]);
    }

    public function logout()
    {
        # code...
    }   
}

Я получаю эту ошибку, когда я ввожу свое имя пользователя и пароль:

Запрос аутентификации не может быть обработан из-за системной проблемы.

Это то, что я получаю, когда сбрасываю () ошибку в контроллере.

SecurityController.php on line 20:
AuthenticationServiceException {#189 ▼
  -token: UsernamePasswordToken {#236 ▶}
  #message: "The target-entity App\Entity\address cannot be found in 'App\Entity\User#address'."
  #code: 0
  #file: "/home/users/kumar.saurabh/www/html/symfony/test-project/vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php"
  #line: 85
  trace: {▶}
}

Когда я удаляю переменные $address и их функцию получения и установки, тогда вход в систему работает нормально, но когда я использую это, это дает мне вышеупомянутую ошибку.

Как я могу добиться этого с помощью внешнего ключа? Я новичок в symfony и учусь на версии 4.2.


person Saurabh    schedule 26.03.2019    source источник


Ответы (1)


Остерегайтесь случая, замените App\Entity\address на App\Entity\Address, обновите свою схему, и все должно быть в порядке

/**
 * @ORM\OneToOne(targetEntity="App\Entity\address", cascade={"persist", "remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $address;

должно быть

/**
 * @ORM\OneToOne(targetEntity="App\Entity\Address", cascade={"persist", "remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $address;
person Yoann MIR    schedule 26.03.2019