Laravel4:在非对象上调用成员函数update()

时间:2015-01-28 17:11:30

标签: php laravel

以下是我的代码:

型号:

class Slide extends \Eloquent {

    // Add your validation rules here
    public static $rules = [
        'title' => 'required|between:3,100',
        'image' => 'required',
        'url' => 'url',
        'active' => 'integer'
    ];

    // Don't forget to fill this array
    protected $fillable = ['title', 'image', 'url', 'active'];

}

控制器更新方法:

public function update($id)
{
    $slide = Slide::find($id);

    $validator = Validator::make($data = Input::all(), Slide::$rules);

    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }

    $slide->update($data);

    return Redirect::route('admin.slides.index')
            ->with('message', 'Slide has been updated.')
            ->with('message-type', 'alert-success');
}

路线:

Route::group(array('prefix' => 'admin'), function() {
    # Slides Management
    Route::resource('slides', 'AdminSlidesController', array('except' => array('show')));
});

视图中的表单:

{{ Form::model($slide, array('route' => 'admin.slides.update', $slide->id, 'method' => 'put')) }}
    @include('admin/slides/partials/form')
{{ Form::close() }}

部分表单是简单的表单,不确定我是否需要在此处共享。让我知道。

错误:

编辑页面加载完美并从db填充数据,但是当我提交编辑表单时,出现以下错误:

  

在非对象上调用成员函数update()

以下行似乎会产生问题:

  

$ slide->更新($数据);

我通过互联网搜索解决方案,但没有任何工作。尝试过composer dump_autoload,甚至尝试在新项目中从头开始做一切,仍然是同样的问题。 :(

请帮助!!

----编辑----

很快就尝试了以下内容:

public function update($id)
{
    $slide = Slide::find($id);
    $slide->title = Input::get('title');
    $slide->save();

    return Redirect::route('admin.slides.index')
            ->with('message', 'Slide has been updated.')
            ->with('message-type', 'alert-success');
}

现在错误:

  

从空值创建默认对象

-----解决方案:-----

问题出在@lukasgeiter建议的表格上 我改变了我的形式,因为它就像一个魅力:

{{ Form::model($slide, array('route' => array('admin.slides.update', $slide->id), 'method' => 'put')) }}

2 个答案:

答案 0 :(得分:5)

使用$slide->save();代替$slide->update($data);

要更新模型,请阅读laravel doc here

  

要更新模型,您可以检索它,更改属性并使用保存方法:

EX:

$user = User::find(1);

$user->email = 'john@foo.com';

$user->save();

答案 1 :(得分:0)

实际问题不是你的操作员而是你的表格 它应该是这样的:

{{ Form::model($slide, array('route' => array('admin.slides.update', $slide->id), 'method' => 'put')) }}

此错误导致控制器无法接收id。然后find()不会产生任何结果并返回null

我建议除了修复表单外,还使用findOrFail(),如果没有找到记录,则会ModelNotFoundException

$slide = Slide::findOrFail($id);