cakePHP - создание новой учетной записи пользователя, несколько проблем - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть две таблицы: users и tokens.
У каждого пользователя есть поле activated, а у каждого токена есть поля {id, token, user_id, created}.

Способ работы приложения:: При создании приложение -

  1. удостоверится, что поле activated пустое (чтобы избежать манипуляций с отправленными данными).
  2. токен будет создан втаблица tokens.

При обновлении приложение -

  1. НЕ создает новый токен.
  2. НЕ разрешает обновление любого видав поле activated.
  3. проверьте, было ли отправлено новое электронное письмо, и если да, создайте новый токен и установите для поля activated значение false.

Я знаю, как активировать учетную запись через контроллер и как настроить маршрутизатор для этого.
Мне нужна в основном конфигурация модели.
Например: я думаю, что создание токена должно быть выполнено в afterSave метод, так - как мне определить, вызван ли метод обновлением или операцией создания?

Спасибо залюбая помощь

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

yossi вы также можете указать поля, которые должны быть сохранены из формы, хотя - белый список полей, в которых можно сохранить вызов $ this-> save (). Таким образом, вы можете остановить хакера, передающего идентификатор в запросе, и вам нужно просто установить его в контроллере, а затем, используя $ this-> Token-> id = все, что у вас есть, я бы лично использовал saveField ('активирован) в сочетании с этим (просто сохраняет одно поле!). Жирные модели лучше, если вы можете, но сначала запустите их, а затем рефакторинг, если вы застряли. Лучше, чем тратить много времени на написание идеального первого раза.

1 голос
/ 02 сентября 2011

Ваш вопрос неясен.Если у вас есть значение по умолчанию для поля, то почему бы не установить его в базе данных вместо того, чтобы что-то делать после него?Если вам нужно сделать что-то, что должно быть сделано только при определенных обстоятельствах, то напишите в своей модели собственный метод для выполнения задач, которые вы хотите либо при создании, либо при обновлении.

Редактировать

Итак,если ваша запись имеет идентификатор, то вы знаете, что он существует в базе данных.Итак, самое простое - проверить (в любом методе), есть ли у модели поле id и не пусто ли оно.Если он пуст, то вы знаете, что создаете запись и можете выполнить x задание.Если это не так, тогда сделайте задание.

if(isset($modelData['ModelName']['id']) && !empty($modelData['ModelName']['id'])){
    //This is an update
} else {
    //This is a new record
}
...