Просто разбираюсь с Laravel 4.2 и красноречиво. Я наблюдал за слепками Laravel from Scratch на laracasts.com, особенно уроки по проверке и последующему рефакторингу. Примеры, используемые в этих уроках, относятся к относительно простой пользовательской модели, в которой есть только 2 поля: имя пользователя и пароль. Моя пользовательская модель содержит гораздо больше полей, и моя регистрационная форма просит пользователя повторно ввести/подтвердить введенный пароль.
Кажется, рекомендуется, чтобы процесс проверки пользовательского ввода выполнялся внутри модели, что имеет смысл. Так же, как и в этом руководстве, я добавил в свою модель метод isValid
для проверки ввода пользователя в мою регистрационную форму. Я заполняю свою пользовательскую модель на основе ввода следующим образом:
$input = Input::all();
if (!$this->user->fill($input)->isValid()) {
return Redirect::back()->withInput()->withErrors($this->user->errors);
}
Итак, я написал свои правила и заработал проверку, и теперь я готов сохранить ввод пользователя в базу данных. Однако, поскольку я заполнил свою модель всем пользовательским вводом, экземпляр пользовательской модели теперь содержит атрибут confirm_password
, и вызов $user->save();
дает мне ошибку (поскольку у меня нет этого поля в моей таблице базы данных). Кроме того, поскольку я только что передал пользовательский ввод для проверки, пароль там также не хешируется.
Какой подход лучше всего использовать в отношении проверки пользовательского ввода VS, когда модель фактически представляет таблицу базы данных? Я знаю, что есть способы обойти все это, выполнив такие действия, как перемещение проверки за пределы модели и, возможно, просто позволить модели хранить правила проверки и т. д., но я могу искать советы по передовой практике.
Спасибо
mutator
для хеширования пароля и событиеsaving
для отключенияconfirm_password
. Однако я бы все равно не стал проводить валидацию в модели, и ваше «простое» решение, вероятно, окажется негибким и внесет больше сложности, чем кажется сейчас. - person Jarek Tkaczyk   schedule 21.09.2014