我想使用url方法从带有操作按钮的datatable路由,但在成功获取数据时,按钮路由到404页 *VendorController*-*这是datatable函数* 公共函数数据表(){ $data=Vendor::all(); 试一试{ return DataTables::of($data)->addColumn('action',function($data){ $url_edit=url('master/vendor/'.$data->id./edit'); $url=url('master/vendor/'.$data->id./'); $view=“”; $edit=“”; $delete=“”; 返回$view.“$edit.”$delete; })->editColumn('address',函数($data){ 返回str_replace(“\r\n”,“,”,$data->address); })->editColumn('phone',函数($data){ 返回str_replace(“\r\n”,,,$data->phone); })->rawColumns(['action'])->editColumn('id','id:{{$id}')->make(true); }捕获(\异常$e){ } } *php*-*这里我正在利用资源进行路由* 路由::get(“/”,函数(){ 返回视图(“欢迎”); }); Auth::routes(); 路由::get('/home',[App\Http\Controllers\HomeController::class,'index'])->name('home'); 路由::资源(“/master/vendor/”,“\App\Http\Controllers\master\VendorController”); 路由::get('vendor/datatable',[\App\Http\Controllers\Master\VendorController::class,'datatable'])->name('vendor/datatable'); *编辑功能* 公共功能编辑($id) { $data=Vendor::where('id',$id)->where('active','!=',2)->get(); 如果($data->count()>0){ 返回视图('Vendor.update',compact('data'); } } *DataTable脚本*-*以下是DataTable脚本* $(函数(){ $('#示例1')。数据表({ 回答:是的, 处理:对, 分页类型:'full_numbers', stateSave:false, 是的, 是的, ajax:{{url('vendor/datatable')}}, 订单:[0,'desc'], 栏目:[ {数据:'name',名称:'name'}, {数据:'address',名称:'address'}, {数据:'cp',名称:'cp'}, {数据:'phone',名称:'phone'}, {数据:'活动', 渲染:函数(数据){ 如果(数据=='1'){ 返回“活动” } 如果(数据=='2'){ 返回“非活动” } } }, {数据:'action',名称:'action',可搜索:false,可排序:false} ] }); });

我想使用url方法从带有操作按钮的datatable路由,但在成功获取数据时,按钮路由到404页 *VendorController*-*这是datatable函数* 公共函数数据表(){ $data=Vendor::all(); 试一试{ return DataTables::of($data)->addColumn('action',function($data){ $url_edit=url('master/vendor/'.$data->id./edit'); $url=url('master/vendor/'.$data->id./'); $view=“”; $edit=“”; $delete=“”; 返回$view.“$edit.”$delete; })->editColumn('address',函数($data){ 返回str_replace(“\r\n”,“,”,$data->address); })->editColumn('phone',函数($data){ 返回str_replace(“\r\n”,,,$data->phone); })->rawColumns(['action'])->editColumn('id','id:{{$id}')->make(true); }捕获(\异常$e){ } } *php*-*这里我正在利用资源进行路由* 路由::get(“/”,函数(){ 返回视图(“欢迎”); }); Auth::routes(); 路由::get('/home',[App\Http\Controllers\HomeController::class,'index'])->name('home'); 路由::资源(“/master/vendor/”,“\App\Http\Controllers\master\VendorController”); 路由::get('vendor/datatable',[\App\Http\Controllers\Master\VendorController::class,'datatable'])->name('vendor/datatable'); *编辑功能* 公共功能编辑($id) { $data=Vendor::where('id',$id)->where('active','!=',2)->get(); 如果($data->count()>0){ 返回视图('Vendor.update',compact('data'); } } *DataTable脚本*-*以下是DataTable脚本* $(函数(){ $('#示例1')。数据表({ 回答:是的, 处理:对, 分页类型:'full_numbers', stateSave:false, 是的, 是的, ajax:{{url('vendor/datatable')}}, 订单:[0,'desc'], 栏目:[ {数据:'name',名称:'name'}, {数据:'address',名称:'address'}, {数据:'cp',名称:'cp'}, {数据:'phone',名称:'phone'}, {数据:'活动', 渲染:函数(数据){ 如果(数据=='1'){ 返回“活动” } 如果(数据=='2'){ 返回“非活动” } } }, {数据:'action',名称:'action',可搜索:false,可排序:false} ] }); });,php,html,laravel,url,routes,Php,Html,Laravel,Url,Routes,请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请允许我在线查看可能需要显示的任何其他内容。问题:资源路由生成的路由不包含强制路由参数名称,它是一个{}空的,应该是{vendor} *VendorController*- *this is the datatable function*

请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请告诉我,我将在线获取可能需要显示的任何其他内容 请允许我在线查看可能需要显示的任何其他内容。问题:资源路由生成的路由不包含强制路由参数名称,它是一个
{}
空的,应该是
{vendor}

*VendorController*- *this is the datatable function*

    public function datatable(){
        $data = Vendor::all();
        try {
            return DataTables::of($data)->addColumn('action', function ($data) {
                $url_edit = url('master/vendor/'.$data->id.'/edit');
                $url = url('master/vendor/'.$data->id.'/');
                $view = "<a class='btn btn-action btn-primary' href='$url' title='View'><i class='nav-icon fas fa-eye'></i></a>";
                $edit = "<a class='btn btn-action btn-warning' href='$url_edit' title='View'><i class='nav-icon fas fa-edit'></i></a>";
                $delete = "<button data-url='" . $url . "' onclick='deleteData(this)' class='btn btn-action btn-danger' title='delete'><i class='nav-icon fas fa-trash'></i></button>";

                return $view."".$edit."".$delete;
            })->editColumn('address', function ($data) {
                return str_replace("\r\n", ',', $data->address);
            })->editColumn('phone', function ($data) {
                return str_replace("\r\n", ',', $data->phone);
            })->rawColumns(['action'])->editColumn('id', 'ID:{{$id}}')->make(true);
        } catch (\Exception $e) {
        }
    }


*web.php* - *here i am making use of resource for my routing*

 
Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::resource('/master/vendor/', '\App\Http\Controllers\Master\VendorController');
Route::get('vendor/datatable', [\App\Http\Controllers\Master\VendorController::class, 'datatable'])->name('vendor/datatable');

*The edit function*


 public function edit($id)
    {
        $data = Vendor::where('id', $id)->where('active', '!=', 2)->get();
        if ($data->count() > 0){
            return view('Vendor.update', compact('data'));
        }
    }

*DataTable Script* - *here's the datatable script*
   <script>
        $(function () {
             $('#example1').DataTable({
                responsive: true,
                processing:true,
                pagingType:'full_numbers',
                stateSave:false,
                scrollY:true,
                scrollX:true,
                ajax:"{{url('vendor/datatable')}}",
                order:[0, 'desc'],
                columns:[
                    {data:'name', name:'name'},
                    {data:'address', name:'address'},
                    {data:'cp', name:'cp'},
                    {data:'phone', name:'phone'},
                    {data:'active',
                        render:function(data){
                        if(data=='1'){
                            return '<span class="badge badge-success">Active</span>'
                        }
                        if(data=='2'){
                            return '<span class="badge badge-warning">Inactive</span>'
                        }
                    }
                    },
                     {data:'action', name:'action', searchable:false, sortable:false}
                ]
            });
        });
    </script>
查看URI中的所有
{}
,当您生成像
master/vendor/1/edit
这样的路由来编辑
resource#1
时,它会导致404

该问题是由于资源路由
/master/vendor/
中的尾部斜杠引起的。 在资源路由中,最后一个变量放在大括号内,使其成为参数名。但在这种情况下,laravel认为斜杠后面的值是空的,这导致了路由中的
{}

删除尾部斜杠,输出将为

Route::resource('/master/vendor/', '\App\Http\Controllers\Master\VendorController');

Output:
+--------+-----------+-----------------------+---------+-----------------------------------------+------------+
| Domain | Method    | URI                   | Name    | Action                                  | Middleware |
+--------+-----------+-----------------------+---------+-----------------------------------------+------------+
|        | GET|HEAD  | master/vendor         | index   | App\Http\Controllers\Controller@index   | web        |
|        | POST      | master/vendor         | store   | App\Http\Controllers\Controller@store   | web        |
|        | GET|HEAD  | master/vendor/create  | create  | App\Http\Controllers\Controller@create  | web        |
|        | GET|HEAD  | master/vendor/{}      | show    | App\Http\Controllers\Controller@show    | web        |
|        | PUT|PATCH | master/vendor/{}      | update  | App\Http\Controllers\Controller@update  | web        |
|        | DELETE    | master/vendor/{}      | destroy | App\Http\Controllers\Controller@destroy | web        |
|        | GET|HEAD  | master/vendor/{}/edit | edit    | App\Http\Controllers\Controller@edit    | web        |
+--------+-----------+-----------------------+---------+-----------------------------------------+------------+
旧解决方案:由于强制
id
参数,导致找不到路线。手动创建路线

Route::resource('/master/vendor', '\App\Http\Controllers\Master\VendorController');

Output:
+--------+-----------+-----------------------------+----------------+-----------------------------------------+------------+
| Domain | Method    | URI                         | Name           | Action                                  | Middleware |
+--------+-----------+-----------------------------+----------------+-----------------------------------------+------------+
|        | GET|HEAD  | master/vendor               | vendor.index   | App\Http\Controllers\Controller@index   | web        |
|        | POST      | master/vendor               | vendor.store   | App\Http\Controllers\Controller@store   | web        |
|        | GET|HEAD  | master/vendor/create        | vendor.create  | App\Http\Controllers\Controller@create  | web        |
|        | GET|HEAD  | master/vendor/{vendor}      | vendor.show    | App\Http\Controllers\Controller@show    | web        |
|        | PUT|PATCH | master/vendor/{vendor}      | vendor.update  | App\Http\Controllers\Controller@update  | web        |
|        | DELETE    | master/vendor/{vendor}      | vendor.destroy | App\Http\Controllers\Controller@destroy | web        |
|        | GET|HEAD  | master/vendor/{vendor}/edit | vendor.edit    | App\Http\Controllers\Controller@edit    | web        |
+--------+-----------+-----------------------------+----------------+-----------------------------------------+------------+

仍然需要检查为什么资源路由不起作用。是的,感谢Jeetu的帮助,bahut bahut dhanyavaadComments不用于扩展讨论;这段对话已经结束。
Route::get('/master/vendor/{id}/edit', '\App\Http\Controllers\Master\VendorController@edit');