我尝试使用简单CRUD的路由模型绑定,但更新和删除功能不工作。我使用laravel 5.5
Route::resource('admin/file','AdminController');
我的编辑和删除按钮视图
<a href="{{ route('file.edit', ['id'=>$file->id]) }}">
<form action="{{ route('file.destroy', ['id'=>$file->id]) }}" method="post">
{{method_field('DELETE')}}
{{csrf_field()}}
<button type="submit" class="delete">delete</button>
</form>
我的资源控制器:
namespace App\Http\Controllers;
use App\Files;
use Illuminate\Http\Request;
存储工作良好
public function store(Request $request)
{
$this->validate($request,[
'title'=>'required',
'body'=>'required',
'price'=>'required',
'linkFile'=>'required',
]);
Files::create($request->all());
return redirect(route('file.index'));
}
但编辑和删除不起作用
public function edit(Files $files)
{
return view('admin.edit',compact('files'))->with('title','Edit File');
}
public function destroy(Files $files)
{
$files->delete();
return redirect(route('file.index'));
}
我的模型:
protected $table='files';
protected $fillable=[
'title','body','price','linkFile'
];
当我删除按钮时,没有任何React,并按相同方式编辑
如果我在编辑和删除功能的第一列添加dd($files)
,则响应将为[]
,并且句柄没有错误
这里是我的路线列表
任何人都可以帮助拜托?
3条答案
按热度按时间j2qf4p5b1#
最后,经过2天我找到了我的答案,我想在这里提供我的答案,每个人谁可能有同样的问题。
要使路由绑定工作,类型提示的变量名必须与路由占位符名匹配
例如我的编辑方法
下面是我要编辑的路由URI
正如您所看到的,路由定义中有一个
{file}
占位符,因此相应的变量必须称为$file
。lf5gs5x22#
我又偶然发现了这个。我不确定这是我自己的错误还是这个中间件默认丢失了。
我正在使用Laravel 8并开发一个API。当我试图调用一个应该隐式绑定到模型的路由时,我总是得到一个空数组作为响应。
TL;DR检查
Kernel.php
文件$routedMiddlewareGroups
API数组中是否添加了SubstituteBindings::class
。否则,将无法正确解析您的请求。对API的请求|按ID获取用户|前端,版本js
UserComponent.vue
以下是我如何设置我的API保护路由:
路由/
api.php
UserController.php
没有此中间件
SubstituteBinding::class
,隐式绑定将无法工作!确保检查内核/ API设置
Kernel.php
现在打电话的时候
它返回正确的用户数据。
velaa5lx3#
我知道这个问题已经有了解决方案,但让我补充一些可能对其他人有用的知识...
正如文档所述,当使用资源控制器时,资源路由将使用基于资源“单数化”名称的参数,在问题的情况下,由于@siros在路由中使用的是“file”资源名称(单数形式),因此控制器方法中的绑定名称应该是“file”,尽管他的模型名为
Files
,如果他试图用途:控制器仍然需要
Files $file
才能工作,因为file
是files
的单数形式。然而还有其他您可以通过在路由配置中提供
parameters
选项来更改URL中的类型提示变量,如文档中所示,该选项将自动应用于show
、edit``update
和destroy
方法。例如,这将允许您保持控制器中的变量名称与型号名称匹配。因此,在本例中,@siros可以在routes文件中使用此函数:
他可以在控制器中使用这个:
希望这能帮到什么人。