在Laravel 5中保存/更新用户配置文件

Syl*_*lar 5 php laravel 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() !!}
Run Code Online (Sandbox Code Playgroud)

在我的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('/');

}
Run Code Online (Sandbox Code Playgroud)

点击更新按钮后,它会在主页上显示flash消息,但它没有保存到数据库中.我来自Rails,我觉得我需要将某些内容列入白名单.

sho*_*ild 9

关键是,您根本不更改用户模型...您检索它,然后再次保存它而不设置任何字段.

$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
Run Code Online (Sandbox Code Playgroud)

如果您使用上述方法

$user->fill(\Input::all());
Run Code Online (Sandbox Code Playgroud)

你必须在你的用户模型中添加一个$ fillable数组

protected $fillable = ['name', 'email', 'password']; // add the fields you need
Run Code Online (Sandbox Code Playgroud)

如果您明确想要只设置一个或两个(或三个....)字段,则可以使用它来更新它们

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

如果您尝试过提供的anwer Sinmok,您可能会因为使用而获得"whooops"页面

Input::get('field');
Run Code Online (Sandbox Code Playgroud)

代替

\Input::get('field');
Run Code Online (Sandbox Code Playgroud)

在你的Blade语法中,我假设您使用了laravel 5.因此,当您的控制器是命名空间时,您必须在输入之前添加\以引用根命名空间(或在类的顶部放置一个use语句)

通常在开发服务器上,您应该启用调试.那么你有更多关于什么出错的详细信息,而不仅仅是纯粹的......"哎呀......"

在您的config/app.php文件中,您可以设置

'debug' => true;
Run Code Online (Sandbox Code Playgroud)

要么

你看看http://laravel.com/docs/5.0/configuration 并使用.env文件.

如果您使用.env文件,请确保有一个类似的条目

APP_DEBUG=true
Run Code Online (Sandbox Code Playgroud)

然后你可以在config/app.php中访问该值

'debug' => env('APP_DEBUG'),
Run Code Online (Sandbox Code Playgroud)

您的安装中应该有一个.env.example,以便您了解此类文件的外观.