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

Following are my codes:

Model:

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'];

}

Controller Update Method:

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:

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

Form in View:

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

Partial Form is simple form, not sure if I need to share it here or not. Let me know.

Error:

Edit page loads perfectly and populates data from db, but when I submit the edit form, I get following error:

Call to a member function update() on a non-object

The following line seems to be creating problems:

$slide->update($data);

I have searched over the internet for solution but nothing is working. Have tried composer dump_autoload, even tried doing everything from scratch in a new project, still same issue. :(

Help please!!

---- Edit ----

Just quickly tried following:

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

Now the error:

Creating default object from empty value

----- Solution: -----

The problem was with my form as suggested by @lukasgeiter I changed my form to following at it worked like a charm:

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

The actual problem is not your controller but your form.
It should be this instead:

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

This mistake causes the controller to receive no id. Then find() yields no result and returns null.

I recommend besides fixing the form you also use findOrFail() which will throw a ModelNotFoundException if no record is found.

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

use $slide->save(); instead of $slide->update($data);

to update a model please read the laravel doc here

To update a model, you may retrieve it, change an attribute, and use the save method:

EX :

$user = User::find(1);

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

$user->save();