Laravel 路线是';t在叶片中使用时,将变量传递给控制器
我在视图中使用一个命名路由,传递两个变量,但它抛出一个错误,即没有传递任何参数 我知道我可以为href构建url,但从我目前阅读的内容来看,我正在尝试的应该也很好(我没有看到我所做的与文档示例有什么不同) show.blade.php中的链接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
在浏览器中,链接显示为
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。我如何使路由同时接受这两个参数:我猜还有另一个路由覆盖了它。你能给我们看看你的路线文件内容吗?这确实是最大的罪魁祸首。当我修复这个问题时,它还不起作用,但至少我的错误离问题越来越近了。我不确定在那之后我做了什么改变,但经过更多的调整后,它突然起了作用。谢谢