Я переделываю страницы регистрации по умолчанию в установке Laravel и имею следующую форму:
<form method = "POST" class = "uk-form-horizontal uk-margin-large" action = "{{ route('registerbasic') }}">
@csrf
<input class = "uk-input" id = "form-horizontal-text" type = "text" placeholder = "e.g. Jane" name = "first_name">
...more inputs
</form>
Маршрут в моем web.php идет к моему Auth \ RegisterController:
Route::post('/register/basic/create', 'Auth\RegisterController@create')->name('registerbasic');
А в моем RegisterController @ создать у меня есть:
protected function create(array $data)
{
return User::create([
'firstname' => $data['first_name'],
'lastname' => $data['last_name'],
'province' => $data['province'],
'postal_code' => $data['postal_code'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
Однако, когда я нажимаю форму отправки, я получаю сообщение об ошибке о том, что в функцию create(array $data) не передаются аргументы:
Как я могу правильно получить данные в форме, переданной в эту функцию?






Используйте объект Request (Illuminate \ Http \ Request). Laravel предоставляет класс Request и набор методов для обработки данных запроса. Для подробностей вы можете проверить это https://laravel.com/docs/5.6/requests
public function create(Request $request)
{
$data = $request->all();
return User::create([
'firstname' => $data['first_name'],
'lastname' => $data['last_name'],
'province' => $data['province'],
'postal_code' => $data['postal_code'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
Примечание: Всегда хорошо проверять ваши данные перед их созданием, и вам также необходимо указать protected $fillable = []; в вашем классе модели User для массовое присвоение
Не могли бы вы объяснить, почему нестандартный метод create использует массив вместо объекта Request? Очевидно, что это тоже работает, но когда я редактировал форму, мне пришлось теперь изменить ее на объект запроса.
@Vranvs обновил ответ со ссылкой, попробуйте и дайте мне знать, если у вас есть какие-либо вопросы
В RegisterController используйте Illuminate \ Http \ Request. И тогда вы можете использовать объект Request.
public function create(Request $request){
return User::create([
'firstname' => $request->first_name,
'lastname' => $request->last_name,
'province' => $request->province,
'postal_code' => $request->postal_code,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
}
Еще раз спасибо rkj. Пришлось также добавить объект.