Laravel 5.5 - 试图获得非对象的属性

问题描述 投票:-2回答:3

我正在尝试更新我的数据,但我不断收到此错误消息:“尝试获取非对象的属性(查看:C:\ xampp \ htdocs \ blog \ resources \ views \ update.blade.php)”。

这是我的update.blade.php文件

@extends ('layout')

@section ('title')

Update page

@stop

@section ('content')

<div class="row">

    <div class="col-lg-12">

        <form action="/todo/save" method="post">

            {{ csrf_field() }}

            <input type="text" class="form-control input-lg" name="todo" 
value="{{ $todo->todo }}" placeholder="Type in to create a new todo">

        </form>

    </div>

</div>

<hr>

@foreach ($todo as $todo)

    {{ $todo->todo }} <a href="{{ route('todo.update', ['id' =>$todo->id]) 
}}" class="btn btn-info btn-sm">Update</a> <a href="{{ route('todo.delete', 
['id' =>$todo->id]) }}"class="btn btn-danger">Delete</a>

    <hr>

@endforeach 

@stop

我的控制器:

public function update($id){

    //dd($id);

    $todo = Todo::find($id);

    return view('update')->with('todo', $todo);  
}

最后我的更新路线:

Route::get('/todo/update/{id}', 'TodosController@update')-
>name('todo.update');

这只是一些基本的东西,但我现在在这里停留了几个小时,任何帮助都非常感谢!

php laravel routes
3个回答
1
投票

如果$ todo为空,则在控制器上使用findOrFail方法抛出异常

public function update($id){

    $todo = Todo::findOrFail($id);

    return view('update', compact('todo'));  
}

问题也在你的update.blade.php文件上。 foreach $todo as todo$todo拥有雄辩的模型或雄辩的模型?我认为这是一个雄辩的模型。所以一个循环没有任何意义。


0
投票

如果todo为FALSE或其他非对象,则会发生该错误。

您可以使用控制器中的var_dump($todo);die();进行检查。


0
投票

find()将返回null或找到的模型。假设找到了模型,那么你在该模型(foreach ($todo...))上为每个模型做一个,它将迭代模型的公共属性。这显然不是你打算做的。

它看起来像你试图循环你的待办事项列表并打印出编辑/删除链接。如果是这种情况,您需要在控制器中获取待办事项列表,将其传递到视图中,然后修复foreach语句。

控制器:

$todos = Todo::get();
// pass to view

视图:

foreach ($todos as $todo) 
© www.soinside.com 2019 - 2024. All rights reserved.