Saving/Updating Laravel 5 中的用户个人资料
Saving/Updating User Profile in 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,我觉得我需要将某些内容列入白名单。
您似乎还没有为用户对象设置提交值。
尝试(更新此内容是为了 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
重点是,您根本不更改用户模型...您检索它,然后在不设置任何字段的情况下再次保存它。
$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 数组,例如
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。
因此,由于您的控制器已命名空间,因此您必须在 Input 之前添加一个 \ 以引用根命名空间(或在 class 之上放置一个 use 语句)
通常在您的开发服务器上您应该启用调试。然后你有比纯粹的.. "whoops... "
更详细的关于出了什么问题的信息
在你的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 来为您提供这样一个文件可能是什么样子的线索。
UserController 更新函数看起来像这样:-
public function update(Request $request)
{
$user = Auth::user();
$data = $this->validate($request, [
'name' => 'required',
'email' => 'required',
]);
$user->name = $data['name'];
$user->email = $data['email'];
$user->save();
return redirect('/user_edit/'.Auth::user()->id)->with('success', 'User has been updated!!');
}
我似乎无法将更新后的配置文件保存到数据库中。
在我的 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,我觉得我需要将某些内容列入白名单。
您似乎还没有为用户对象设置提交值。
尝试(更新此内容是为了 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
重点是,您根本不更改用户模型...您检索它,然后在不设置任何字段的情况下再次保存它。
$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 数组,例如
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。 因此,由于您的控制器已命名空间,因此您必须在 Input 之前添加一个 \ 以引用根命名空间(或在 class 之上放置一个 use 语句)
通常在您的开发服务器上您应该启用调试。然后你有比纯粹的.. "whoops... "
更详细的关于出了什么问题的信息在你的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 来为您提供这样一个文件可能是什么样子的线索。
UserController 更新函数看起来像这样:-
public function update(Request $request)
{
$user = Auth::user();
$data = $this->validate($request, [
'name' => 'required',
'email' => 'required',
]);
$user->name = $data['name'];
$user->email = $data['email'];
$user->save();
return redirect('/user_edit/'.Auth::user()->id)->with('success', 'User has been updated!!');
}