2016-01-29 3 views
0

Я пытаюсь использовать (и понимать), как безопасность работает в Symfony. Я создал форму входа и работает с жестко запрограммированными пользователями.Форма входа Symfony с существующим классом пользователя

Теперь я хочу использовать существующую таблицу пользователей в моей базе данных. В таблице есть все требуемые поля, но с разными именами столбцов. Сущность также существует, также с разными именами (например, «customUserId» вместо «id»).

Нечто подобное (с «MAGIC_MAPPING»):

/** 
* @ORM\Table(name="custom_user_table") 
* @ORM\Entity 
*/ 
class User implements UserInterface, \Serializable 
{ 
    /** 
    * @ORM\Column(name="customUserId", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    * @MAGIC_MAPPING so it links this to the mandatory "id" field 
    */ 
    private $customUserId; 

    ... 
} 

Есть ли способ, чтобы отобразить мои существующие поля так Symfony использует их для входа цели? Или, по крайней мере, я могу заставить его работать, не меняя структуру базы данных (только класс сущности)?

Я пробовал seleveral действия, с этого форума и из документации Symfony, но он всегда заканчивается уродливой ошибкой, которую я не могу исправить.

Есть идеи или привести? Большое спасибо за вашу помощь, я изо всех сил на это в течение нескольких часов теперь ...

ответ

1

Вы должны изменить конфигурацию провайдеров внутри security.yml файла

вот пример, я использую по электронной почте поле от моего лица администратора, я думаю, что вы можете сделать то же самое с вашей организацией

providers: administrator: entity: { class: Entity:Administrator, property: email }

+0

У вас была часть ответа. Отдых [здесь] (http://stackoverflow.com/a/35082579/4656551). Благодаря! – DavidL

0

Попробуйте изменить файл ORM из этой таблицы. создать файл ORM с помощью командной строки. затем отредактируйте файл orm.

<mapped-superclass name="FOS\UserBundle\Entity\User" table="your_table_name"> 
    /.../ 
    </mapped> 
0

Benoît Ответ на вопрос поможет мне понять это. Я слишком много внимания уделял процессу создания документации Symfony, который я забыл о существенном: UserInterface. Нет необходимости отображать что-либо, просто реализовать этот интерфейс и определенные методы, как:

public function getUsername() { 
    return $this->customLogin; 
} 

Затем обновите конфигурацию поставщика (благодаря Benoit):

providers:   

    db_sam_provider: 
     entity: 
      class: AppBundle:User 
      property: customLogin 

Остальные части соответствовать Symfony документации: here и here