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

时间:2015-04-07 18:37:32

标签: 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() !!}

在我的个人资料控制器中:

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

}

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

3 个答案:

答案 0 :(得分: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

如果您使用上述方法

$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();

如果你已经尝试过提供的anwer Sinmok,你可能会得到#34; whooops"页面,因为你使用

Input::get('field');

而不是

\Input::get('field');

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

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

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

'debug' => true;

OR

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

如果您使用.env文件,请确保存在类似

的条目
APP_DEBUG=true

然后您可以使用

在config / app.php中访问该值
'debug' => env('APP_DEBUG'),

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

答案 1 :(得分:1)

您似乎未将提交值设置为用户对象。

尝试(更新此内容适用于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

答案 2 :(得分:1)

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!!');
    }