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