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

Php Laravel4:对非对象调用成员函数update(),php,laravel,Php,Laravel,以下是我的密码: 型号: class Slide extends \Eloquent { // Add your validation rules here public static $rules = [ 'title' => 'required|between:3,100', 'image' => 'required', 'url' => 'url', 'active' => 'inte

以下是我的密码:

型号:

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() }}
控制器更新方法:

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() }}
路线:

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() }}
视图中的表单:

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() }}
部分表单是简单表单,不确定是否需要在此处共享。让我知道

错误:

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() }}
“编辑”页面完全加载并填充数据库中的数据,但当我提交编辑表单时,出现以下错误:

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

下面这一行似乎在制造问题:

$slide->update($data)

我在互联网上搜索了解决方案,但没有任何效果。曾经尝试过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');
}
现在显示错误:

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() }}
从空值创建默认对象

----解决方案:-- 问题在于@lukasgeiter建议的我的表格 我把我的表格改成了下面的表格,它就像一个符咒:

{{ Form::model($slide, array('route' => array('admin.slides.update', $slide->id), 'method' => 'put')) }}
使用
$slide->save();
而不是
$slide->update($data);

要更新模型,请阅读

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

例:

使用
$slide->save();
而不是
$slide->update($data);

要更新模型,请阅读

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

例:


实际的问题不是你的控制器,而是你的表单。
应该是这样的:

{{ Form::model($slide, array('route' => array('admin.slides.update', $slide->id), 'method' => 'put')) }}
此错误导致控制器没有收到id。然后
find()
不产生任何结果并返回
null

除了修复表单之外,我建议您还使用
findOrFail()
,如果找不到记录,它将抛出
ModelNotFoundException

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

实际的问题不是你的控制器,而是你的表单。
应该是这样的:

{{ Form::model($slide, array('route' => array('admin.slides.update', $slide->id), 'method' => 'put')) }}
此错误导致控制器没有收到id。然后
find()
不产生任何结果并返回
null

除了修复表单之外,我建议您还使用
findOrFail()
,如果找不到记录,它将抛出
ModelNotFoundException

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


试过了,现在它说:**调用成员函数save()在非对象**上,我正在使用资源控制器,您给出的示例不起作用。我已经厌倦了。请按照示例操作。获取
幻灯片
,根据输入分配字段数据并保存。编辑了我的第一篇文章,并添加了尝试此操作后出现的错误。尝试了此操作,现在显示:*调用成员函数save()在非对象**上,我正在使用资源控制器,您给出的示例不起作用。我已经厌倦了。请按照示例操作。获取
幻灯片
,根据输入分配字段数据并保存。编辑了我的第一篇文章,并添加了尝试此操作后出现的错误。这意味着
$Slide
为空。请尝试执行
dd($slide)
查看是否返回了任何内容。还可以在
save()上执行@K.Toress-answer
函数。您正在函数内部定义
$data
变量的作用域,这可能是个问题吗?
$data
变量是否可在其作用域之外访问?换句话说,
$data
是否可通过
保存/更新
方法访问?尝试了@K.Toress的答案,编辑了我的原始帖子,但出现了错误。请检查正如@Timleis所说,
$id
有一张
幻灯片
?这是因为给定的
$id
没有幻灯片,请检查现有记录。这意味着
$Slide
为空。请尝试执行
dd($Slide)
查看是否返回了任何内容。并按照@K.Toress回答
save()
函数。您正在函数内部定义
$data
变量的作用域,这可能是个问题吗?
$data
变量是否可在其作用域之外访问?换句话说,
$data
是否可通过
保存/更新
方法访问?尝试了@K.Toress的答案,编辑了我的原始帖子,但出现了错误。请检查正如@Timleis所说,
$id
有一张
幻灯片
?这是因为给定的
$id
没有幻灯片,请检查现有记录。你就是那个人。问题确实出在我的表单上。按照你的建议,将该数组添加到我的路由名称中,效果非常好。我使用的是findOrFail($id)最初,它给了我ModelNotFoundException,将其更改为find($id)修复了模型未找到异常,但给出了我在原始帖子中提到的错误。由于我没有在数组中发送路由名称和幻灯片id,controller中的更新方法没有收到幻灯片id,因此它无法从数据库中提取任何内容。你就是那个人。问题确实出在我的表单上。将该数组添加到我的rou中这个名字就像你建议的一样,它工作起来很有魅力。我最初使用findOrFail($id),它给了我ModelNotFoundException,把它改为find($id)它修复了model not found异常,但给出了我在原始帖子中提到的错误。由于我没有在数组中发送路由名称和幻灯片id,controller中的更新方法没有接收幻灯片id,因此它无法从数据库中获取任何内容。