#laravel
#laravel
Вопрос:
Я хочу передать user_id и post_id в FormRequest. Поэтому я использую prepareForValidation для слияния с запросом, как это сделано в приведенном ниже коде. Это нормально или я должен передавать параметры на контроллере?
public function rules()
{
return [
'content' => 'required',
'user_id' => 'required|exists:AppModelsUser,id',
'post_id' => 'required|exists:AppModelsPost,id'
];
}
public function prepareForValidation()
{
$this->merge([
'user_id' => Auth::user()->id,
'post_id' => $this->post->id
]);
}
Комментарии:
1. Пожалуйста, напишите код в блоке кода, а не представляйте его в виде изображения.
2. Я был отредактирован, tks.
3. зачем вам нужно проверять что-либо о текущем аутентифицированном пользователе?
4. Для простых целых чисел я бы просто выбрал стандартные правила проверки, например
['required', 'integer', 'min:1', 'exists:table,id']
; я бы использовалprepareForValidation()
для очистки текстовых вводов, поскольку пользователь мог поместить какой-то вредоносный код в строки.5. @lagbox Я хочу объединить как user_id, так и post_id с запросом, поэтому в контроллере я просто вызываю
$request->validated()
как атрибут для создания комментария.
Ответ №1:
Я думаю, что все в порядке, но удалите ненужные проверки, такие как:
существует:AppModels User, id,
и
существует:AppModels Post,id
Я думаю, что все, что вам нужно, чтобы сделать это
public function rules()
{
return [
'content' => 'required',
'user_id' => 'required',
'post_id' => 'required'
];
}
Чтобы избежать попадания в базу данных без причины, пользователь является текущим пользователем, поэтому нет необходимости проверять и отправлять сообщение в текущем запросе, чтобы его нельзя было удалить.
Примечание:
(Бизнес может отличаться для post в зависимости от вашего проекта. Я имею в виду, может ли администратор удалить его, чтобы обычный пользователь не мог выполнить действие, а затем сохранить это правило для post_id (существует: App Models Post,id))
Ответ №2:
Если маршрут выглядит как
Route::patch('posts/{post}', 'update');
public function rules()
{
return [
'content' => 'required'
];
}
public function prepareForValidation()
{
$this->merge([
'user_id' => auth()->id(),
'post_id' => $this->route('post')->id
]);
}
Ответ №3:
Слишком поздно, но вот разумный способ. Перед кодом проверки в контроллере просто используйте следующие 2 метода.
1: $request->request->remove('field_name');
2: $request->request->add(['field_name' => 'modified_value']);
Хорошо идти.