Symfony логин с базой данных - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь получить все данные, хранящиеся в базе данных.

Это мой журнал, когда я пытаюсь отправить форму.

[2018-05-13 02:43:57] doctrine.DEBUG: SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.password AS password_2, u0_.roles AS roles_3, u0_.nickname AS nickname_4, u0_.last_access AS last_access_5 FROM user u0_ WHERE u0_.username = ? ["admin@hime.org"] []
[2018-05-13 02:43:57] security.INFO: Authentication request failed. {"exception":"[object] (Symfony\\Component\\Security\\Core\\Exception\\AuthenticationServiceException(code: 0): Notice: unserialize(): Error at offset 0 of 4 bytes at /home/panthera/Repository/Private/PHP/Hime2/vendor/symfony/security/Core/Authentication/Provider/DaoAuthenticationProvider.php:85, ErrorException(code: 0): Notice: unserialize(): Error at offset 0 of 4 bytes at /home/panthera/Repository/Private/PHP/Hime2/vendor/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php:62)"} []

Моя форма имеет 2 поля - адрес электронной почты и пароль, но в базе данных я храню гораздо больше. ID (интермедиат), имя пользователя (строка), пароль (строка), роль (массив), ник (строка), last_access (DateTime)

Я не уверен, вызвана ли эта проблема типом массива, но когда я исключил его, проблема исчезла. Но я был бы очень признателен, если бы мог использовать его.

в качестве сущности я использую автоматически созданный make: entity Я загружаю данные этим методом

public function loadUserByUsername($username):User
{
    return $this->createQueryBuilder('user')
        ->andWhere('user.username = :username')
        ->setParameter('username', $username)
        ->getQuery()
        ->getOneOrNullResult();
}

Я пытался отладить код, но когда я помещаю var_dump перед возвратом, ничего не происходит. Но в противном случае, когда я использую "die", это работает .. может быть, $ username имеет значение null?

Я действительно потерян. Спасибо за любой совет ..

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
 * @ORM\Column(type="string", length=255)
 */
private $username;

/**
 * @ORM\Column(type="string", length=255)
 */
private $password;

/**
 * @ORM\Column(type="array")
 */
private $roles;

/**
 * @ORM\Column(type="string", length=255, nullable=true)
 */
private $nickname;

/**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $last_access;

public function getId()
{
    return $this->id;
}

public function getUsername(): ?string
{
    return $this->username;
}

public function setUsername(string $username): self
{
    $this->username = $username;

    return $this;
}

public function getPassword(): ?string
{
    return $this->password;
}

public function setPassword(string $password): self
{
    $this->password = $password;

    return $this;
}

public function getRoles(): ?array
{
    return $this->roles;
}

public function setRoles(array $roles): self
{
    $this->roles = $roles;

    return $this;
}

public function getNickname(): ?string
{
    return $this->nickname;
}

public function setNickname(?string $nickname): self
{
    $this->nickname = $nickname;

    return $this;
}

public function getLastAccess(): ?\DateTimeInterface
{
    return $this->last_access;
}

public function setLastAccess(?\DateTimeInterface $last_access): self
{
    $this->last_access = $last_access;

    return $this;
}

public function getSalt()
{
    // TODO: Implement getSalt() method.
    return null;
}

public function eraseCredentials()
{
    // TODO: Implement eraseCredentials() method.
    return null;
}

}

Нет ответа? (

EDIT:

Что ж, я изменяю это, потому что Symfony что-то создает, и тогда его нельзя использовать без дополнительного кода, что излишне сложно. Поэтому я использовал строку, которая разделена на ";" и тогда я отфильтрую это. Это проще :)

1 Ответ

0 голосов
/ 15 мая 2018

Какой тип столбца для roles? Ошибки десериализации часто вызваны неправильными преобразованиями строк. blob хранилище лучше всего подходит для сериализованных массивов в соответствии с документацией: http://php.net/manual/en/function.serialize.php

...