以下是我的代码:
型号:
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')) }}
答案 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);