Данные формы не отправляются в базу данных в контроллере Laravel

#php #laravel

#php #laravel

Вопрос:

На моей домашней странице в моем проекте Laravel у меня есть модальный, который содержит форму.

 <form id="profilesubmitform" method="POST" action="/profilesubmit">
    <div class="form-group">
        <input type="textarea" class="form-control" id="bio" placeholder="Enter your bio here">
        <small class="form-text text-muted">Tell us about yourself!</small>
    </div>
    <div class="form-group">
        <input type="text" class="form-control" id="profileurl" placeholder="Website/Link">
        <small class="form-text text-muted">Add your site, Carrd, Youtube channel, anything!</small>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>
  

И, конечно, в моем web.php файл Я проложил маршрут следующим образом:

 Route::post('/profilesubmit', 'AppHttpControllersProfilesController@profileSubmit');
  

Это относится к функции в моем ProfilesController, которая должна принимать данные из формы и сохранять их в моей базе данных.

 public function profileSubmit(Request $request){
    $user = Auth::user();

    $user->bio = $request->bio;
    $user->profileurl = $request->profileurl;

    $user->save();

    return redirect('home');
}
}
  

$user Переменная должна получать аутентифицированного (вошедшего в систему) пользователя в базе данных. Цель всего этого в том, чтобы они могли отправлять биографию и URL, которые в конечном итоге будут помещены в их профиль, но пока они просто помещаются в столбцы ‘bio’ и ‘profileurl’ в таблице.

Однако, когда я отправляю форму, она ничего не добавляет. Примечательно, что в нем говорится, что «save()» — это неопределенный метод, который является странным, потому что он попадает только как ошибка, когда я определяю $user как «Auth::user();». Любая помощь?

Комментарии:

1. Прочитайте об name атрибуте

2. Вы можете написать код внутри модели

3. Это немного расплывчато. Как насчет этого атрибута ..?

Ответ №1:

Вам нужно добавить name атрибут для каждого <input/>

Только элементы формы с атрибутом name будут передавать свои значения при отправке формы.

Также добавьте {{ csrf_field() }} для AntiCSRF

здесь я переписал ваш код.

 <form id="profilesubmitform" method="POST" action="/profilesubmit">
    {{ csrf_field() }}
    <div>
        <input type="textarea" id="bio" name="bio" placeholder="Enter your bio here">
        <small>Tell us about yourself!</small>
    </div>
    <div>
        <input type="text" id="profileurl" name="profileUrl" placeholder="Website/Link">
        <small>Add your site, Carrd, Youtube channel, anything!</small>
    </div>
    <button type="submit">Submit</button>
</form>
  

Комментарии:

1. Я получаю сообщение об ошибке нарушения целостности после отправки с этим новым кодом. Я подумал, что это может быть просто из-за csrf, но я добавил и этот бит.