Laravel 路线是';t在叶片中使用时,将变量传递给控制器

Laravel 路线是';t在叶片中使用时,将变量传递给控制器,laravel,Laravel,我在视图中使用一个命名路由,传递两个变量,但它抛出一个错误,即没有传递任何参数 我知道我可以为href构建url,但从我目前阅读的内容来看,我正在尝试的应该也很好(我没有看到我所做的与文档示例有什么不同) show.blade.php中的链接 在浏览器中,链接显示为 http://localhost/tasks/create?colony_slug=labr-oclh&action_name=change_name web.php中的路由 Route::get('tasks/crea

我在视图中使用一个命名路由,传递两个变量,但它抛出一个错误,即没有传递任何参数

我知道我可以为href构建url,但从我目前阅读的内容来看,我正在尝试的应该也很好(我没有看到我所做的与文档示例有什么不同)

show.blade.php中的链接

在浏览器中,链接显示为

http://localhost/tasks/create?colony_slug=labr-oclh&action_name=change_name
web.php中的路由

Route::get('tasks/create/{colony_slug}/{action_name}', 'TaskController@create')->name('tasks.create');
TaskController@create

// CREATE ACTION
// =========================================================================
    /**
     * Show the form for creating a new resource.
     *
     * @param string $colony_slug
     * @param string $action_name
     * 
     * @return \Illuminate\Http\Response
     */
    public function create($colony_slug, $action_name)
    {
        dd($colony_slug . " " . $action_name);
    }
错误

Too few arguments to function App\Http\Controllers\TaskController::create(), 0 passed and exactly 2 expected
路线列表

|        | GET|HEAD  | tasks                                    | tasks.index                      | App\Http\Controllers\TaskController@index                              | web,auth
         |
|        | POST      | tasks                                    | tasks.store                      | App\Http\Controllers\TaskController@store                              | web,auth
         |
|        | GET|HEAD  | tasks/create/{colony_slug}/{action_name} | tasks.create                     | App\Http\Controllers\TaskController@create                             | web,auth
         |
|        | PUT|PATCH | tasks/{task}                             | tasks.update                     | App\Http\Controllers\TaskController@update                             | web,auth
         |
|        | DELETE    | tasks/{task}                             | tasks.destroy                    | App\Http\Controllers\TaskController@destroy                            | web,auth
         |
|        | GET|HEAD  | tasks/{task}                             | tasks.show                       | App\Http\Controllers\TaskController@show                               | web,auth
         |
|        | GET|HEAD  | tasks/{task}/edit                        | tasks.edit                       | App\Http\Controllers\TaskController@edit                               | web,auth
         |
| 

通过评论问题发现,问题在于您的自定义路由与资源控制器路由冲突。特别是在路由名称中(通过
named()
),即使它们使用相同的URI,也应该始终是唯一的

根据您的功能目标,您可以使用以下几种解决方案:

解决方案:我只需要一条“创建任务”路线

禁用
任务。使用
except()
修饰符创建由资源控制器创建的
路由:

Route::resource('tasks','TasksController')->除了(['create']);
保持其他路线定义不变。这将从您的应用程序中删除URI
/tasks/create
,并保留带有附加参数的URI

解决方案:我想同时使用这两种方法

路由路径本身是正常的,仅通过名称冲突。将自定义管线命名为不同的名称,并在需要使用额外参数时使用它

Route::get('tasks/create/{colony\u slug}/{action\u name},'TaskController@create')->name('tasks.create custom');
解决方案:我想在创建任务表单上指定默认值

我猜您使用这些参数是为了在创建任务表单中设置一些默认值。如果这正是您的最终目标,那么使用默认的资源控制器route+查询字符串参数将同样有效,并且不会涉及额外的路由

  • 删除额外的自定义路由,并坚持使用资源控制器中的默认路由

  • create()
    controller方法中声明
    illighted\Http\Request
    依赖项:

    public function create(Request $request)
    {
        // ...
    }
    
  • 检查,并将其作为默认值添加到表单中


  • 当我查看您提供的所有代码时,我觉得它是正确的。
    也许你应该检查一下你的路由文件。请记住,路由从Presence top到botton,如果您有另一个具有类似名称的路由,则此路由可能优先于您尝试使用的路由。

    如果您将
    ($colony\u slug,$action\u name)
    替换为
    (Request$Request)
    ,则替换为dd($Request),输出是什么?是否有另一条路径,只有路径
    tasks/create
    -没有参数?
    route()
    生成的URL正在创建一个查询字符串,而不是URI参数,这让我觉得有冲突,它抓取的是错误的。@UkraineInTheMembrane您需要dd($request)的哪些部分?@AkenRoberts啊,这似乎确实造成了麻烦。它下面有一个Route::resource('tasks','TaskController')。我添加了一个例外,事实上,这确实抓住了它。现在看来,由于没有/{colony\u slug}/{action\u name},所以预期的路由忽略了uri。我如何使路由同时接受这两个参数:我猜还有另一个路由覆盖了它。你能给我们看看你的路线文件内容吗?这确实是最大的罪魁祸首。当我修复这个问题时,它还不起作用,但至少我的错误离问题越来越近了。我不确定在那之后我做了什么改变,但经过更多的调整后,它突然起了作用。谢谢