2016-01-27 6 views
1

Я довольно новичок в кодировании в Laravel, и я слежу за видео Laravel Basics от Jeffery Way. Сейчас я работаю над созданием собственного сайта, который позволит пользователям регистрироваться, отправлять и получать сообщения и отправлять сообщения на форум.Laravel 5.2: ModelNotFoundException для определенных моделей

Я настраиваю отправку/получение сообщений и поддерживаю его достаточно хорошо, но я хочу, чтобы это было безопасно для пользователя, пытающегося отправить сообщение неверному имени пользователя.

Форма очень проста: 'send_to' принимает имя пользователя, 'заголовок' и 'тело'.

Мое сообщение имеет мутатор, который запрашивает базу данных для этого имени пользователя и устанавливает поле «send_to» для этого идентификатора пользователя.

public function setSendToAttribute($value) 
    { 
     $user = User::where('name', $value)->firstOrFail(); 

     $this->attributes['send_to'] = $user->id; 
    } 

Что бы я хотел сделать, это поймать исключение, если имя пользователя недействительно. Не я сделал это с handler.php файл, как показано ниже:.

public function render($request, Exception $e) 
{ 
    if($e instanceof ModelNotFoundException) 
     return $e->getmessage(); 
    return parent::render($request, $e); 
} 

Так что это отлично работает и возвращает сообщение «Нет результатов запроса для модели [App \ User] То, что я бы предпочел, чтобы сделать хотя он установлен так, чтобы он снова возвращался к форме с заполненным заголовком и телом и сообщением об ошибке, в котором говорилось, что имя пользователя не зарегистрировано.

Еще одна часть этого вопроса может быть выполнена отдельно от всех значений ModelNotFoundExceptions если я пытаюсь найти конкретное сообщение, он не вернет, что Пользователь не найден?

+1

Я бы рекомендовал вам выполнить проверку пользователя внутри вашего контроллера. Вы хотите проверить информацию, а затем отправить соответствующее сообщение пользователю или выполнить задание. Я бы также рекомендовал использовать мутаторы только для форматирования значений, это не правило, но мутаторы предназначены для изменения данных перед тем, как перенести его в базу данных. То, как вы это делаете, вы «скрываете» свою логику внутри мутатора, что противоречит интуиции. Надеюсь это поможет. – TiagoRL

ответ

0

Вместо того, чтобы скрывать логику внутри мутатора, вы можете c reate FormRequest или проверить пользователя в контроллере.

Использование правил проверки, вы можете проверить вход для пользователя существования, и перенаправлять обратно на провал, или возвращает 422 ошибку в случае, если вы используете запрос Ajax (с заголовком Accept: приложения/JSON)

я настоятельно рекомендую вам прочитать о проверке и проверить это конкретное правило, я ссылку ниже:

https://laravel.com/docs/5.2/validation#rule-exists

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

+0

Это сработало отлично! Спасибо! Я использовал проверку, чтобы проверить, существует ли пользователь, и оставил мутатор. Работает как шарм! – aylnon

Смежные вопросы