sfDoctrineGuard Плагин и регистрационная форма - PullRequest
0 голосов
/ 03 апреля 2011

Со вчерашнего дня я пытаюсь разработать форму в ajax, вставляя данные в таблицу sf_guard_user и в таблицу с именем user (вот профиль).Защитная таблица имеет два столбца «электронная почта» и «пароль» для входа в систему и «пользователь» для получения данных после входа в систему.
Форма регистрации в ajax, и все в порядке, но я не знаю, как вставитьДанные в двух таблицах.Я делаю следующее (в действии, называемом «тестирование» -> /user/testing).

$ user = new sfGuardUser ();$ user-> email='email@server.com ';
$ user-> password =' ​​password ';
Я комментирую строку $ user-> save (), и получаю ошибку:
Неизвестное свойство записи / связанный компонент "salt" в "sfGuardUser"


Вот схема для sfGuardUser:
sfGuardUser:<br> actAs: [Timestampable]<br> columns:<br> email_address:<br> type: string(255)<br> notnull: true<br> unique: true<br> password: string(128)<br> is_active:<br> type: boolean<br> default: 1<br> is_super_admin:<br> type: boolean<br> default: false<br> last_login:<br> type: timestamp<br> (sorry for the bad indexing, don't know how to paste code)</p> <p>



ИМой другой вопрос: как только я сохраню форму, как мне сохранить данные в «пользовательской» таблице, например
$ user-> user-> name = 'blabla';
$ user-> user->фамилия = 'блаблабла';
и т. д. и т. д. и т. п.

Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Вместо этих строк:

$user=new sfGuardUser();
$user->email='email@server.com';
$user->password='password';

напишите это как

$user = new sfGuardUser();
$user->setEmail('email@server.com');
$user->setPassword('password');

разница в том, что использование общедоступных методов set / get - лучший дизайн, а не просто установка объектапараметры.Важно то, что прямо сейчас вы полагаетесь на sfGuardPlugin, который переопределяет нормальное поведение, и установка пароля - это не просто установка значения, это гораздо более сложная задача (генерация соли, получение алгоритма хеширования из конфигурации и т. Д.,Вы можете проверить это здесь http://trac.symfony -project.org / browser / plugins / sfDoctrineGuardPlugin / branch / 1.3 / lib / model / doctrine / PluginsfGuardUser.class.php начиная со строки 33).

Если вы позвоните

$user->save();

, это сохранит данные в таблице sf_guard_user.Чтобы создать профиль или в вашем случае строку «user» в базе данных, создайте ее как объект sfGuardUser (если ваша таблица «user» определена в вашем schema.yml и сгенерированы файлы модели)

$profile = new User();
$profile->setName('blabla');
$profile->setLastname('blablabla');

Чтобы связать sfGuardUser и объекты профиля, вам необходимо решить, как реализовать это соотношение 1: 1.Например, вы можете добавить sfGuardUserId в профиль:

$profile->setGuardUserId($user->getId());
$profile->save();

Если вы хотите проверить, как я сделал то же самое здесь: http://code.google.com/p/sc2-cup-app/source/browse/trunk/apps/frontend/modules/sfGuardAuth/actions/registerAction.class.php

1 голос
/ 03 апреля 2011

Ваша схема неверна, ваша схема для sfGuardUser должна быть:

sfGuardUser:
  actAs:
    Timestampable: 
  columns:
    id:
      primary: true
      type: integer
      autoincrement: true
    first_name:
      type: string(255)
    last_name:
      type: string(255)
    email_address:
      unique: true
      type: string(255)
      notnull: true
    username:
      unique: true
      type: string(128)
      notnull: true
    algorithm:
      default: sha1
      type: string(128)
      notnull: true
    salt:
      type: string(128)
    password:
      type: string(128)
    is_active:
      default: 1
      type: boolean
    is_super_admin:
      default: false
      type: boolean
    last_login:
      type: timestamp
    last_action_date:
      type: timestamp

Когда вы создаете нового пользователя, sfDoctrineGuard солит пароль.Следовательно, почему вы получаете сообщение об ошибке «неизвестное свойство записи».Свойство "соль" не существует в вашей схеме.У меня есть регистрационная форма, если вам нужен код для нее.

...