Сохранение / обновление профиля пользователя в Laravel 5

Я не могу сохранить обновленный профиль в базе данных.

В моем edit.blade.php:

{!! Form::model($user, ['method' => 'PATCH', 'route' => ['profile.update', $user->company_name] ]) !!} // fields {!! Form::submit('Update Profile', ['class' => 'btn btn-primary']) !!} {!! Form::close() !!} 

В моем ProfilesController:

 public function update($company_name) { $user = User::whereCompanyName($company_name)->firstOrFail(); $user->save(); // no validation implemented flash('You have successfully edited your profile'); return redirect('/'); } 

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

Дело в том, что вы вообще не меняете свою модель пользователя … Вы извлекаете ее, а затем сохраняете ее снова, не задавая никаких полей.

 $user = User::whereCompanyName($company_name)->firstOrFail(); // this 'fills' the user model with all fields of the Input that are fillable $user->fill(\Input::all()); $user->save(); // no validation implemented 

Если вы используете вышеуказанный метод с

 $user->fill(\Input::all()); 

вам нужно добавить $ fillable array в свою модель пользователя, например

 protected $fillable = ['name', 'email', 'password']; // add the fields you need 

Если вы явно хотите установить только одно или два (или три …) поля, вы можете просто обновить их с помощью

 $user->email = \Input::get('email'); // email is just an example.... $user->name = \Input::get('name'); // just an example... ... $user->save(); 

Если вы попробовали андер Sinmok, вы, вероятно, получите страницу «whooops», потому что вы использовали

 Input::get('field'); 

вместо

 \Input::get('field'); 

На вашем синтаксисе Blade я предполагаю, что вы используете laravel 5. Так как ваш контроллер находится в пространстве имен, вам нужно добавить a \ before Input для ссылки на корневое пространство имен (или поставить оператор использования поверх своего класса)

Как правило, на сервере разработки вы должны включить отладку. Тогда у вас есть более подробная информация о том, что происходит не так, как просто чист … «кричит …»

В файле config / app.php вы можете установить

 'debug' => true; 

ИЛИ

вы можете посмотреть http://laravel.com/docs/5.0/configuration И использовать файл .env.

Если вы используете файл .env, убедитесь, что есть запись с чем-то вроде

 APP_DEBUG=true 

то вы можете получить доступ к этому значению в config / app.php с помощью

 'debug' => env('APP_DEBUG'), 

В вашей установке должен быть пример .env.example, чтобы дать вам представление о том, как выглядит такой файл.

Похоже, вы не задали значения представления для объекта пользователя.

Попробуйте (обновите это для Laravel 4)

  $user = User::whereCompanyName($company_name)->firstOrFail(); $user->field = Input::get("some_field"); // Name of the input field here $user->save(); // no validation implemented flash('You have successfully edited your profile'); return redirect('/'); 

РЕДАКТИРОВАТЬ

На самом деле, если вы используете Laravel 5, похоже, это должно быть:

 $user->field = Request::input('some_field'); // Name of the input field here $user->save(); // no validation implementedenter code here