如何从视图传参给 controller 的方法?

大家好,我在开发时遇到了一个问题,希望大家能帮我看一下。我现在在一个视图里输出了一个mysql数据库的表,想通过一个下拉菜单实现排序。通过点击下拉菜单实现为controller里的排序方法传参,但是链接写了很多次都不对,希望大家帮我一下!多谢!
数据库:sample 表:yao
file

路由 routes/web.php:
file
SalesController.php
file
Model/Sale.php
file
下拉菜单的视图方法:
file
当前页面 (当前视图是pos_table ,可以正确显示):
file

点击之后(目前是log没有错误,而且看路由获取正确,为什么没有返回视图pos_table):
file

希望大家不吝赐教!!!
微信:alpha94511

Alpha在巴黎
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

參考 https://learnku.com/docs/laravel/5.6/contr...

补充资源控制器
如果你想为一个资源控制器在默认的资源路由之外增加额外的路由,你应该在调用Route::resource之前定义这些路由。否则由 resource 方法定义的路由可能会无意中优先于你补充的路由

因為聲明先後的關係,你的路由進入的入口是 pos_table/{id} ,而非 pos_table/{sort_by?}

6年前 评论
讨论数量: 7

你先在那个saletable dd调试查看一下$sales的值吧。

6年前 评论

路由里面定义的 sort_by 是可选参数, 不过好像你并没有给他默认值
其实你可以在resources的 get 方法里依赖注入 Request , 然后获取query的值

public function index(Request $request) 
{
  $sort_by = $requst->input('sort_by', null);
  $sales = Sales::query()
  ->when(!empty($sort_by), function ($query) use ($sort_by) {
    return $query->orderBy($sort_by, 'asc');
  })
  ->paginate(15);
  ...  TODO
}
6年前 评论

@tiller 我看了一下,好像没啥问题啊
file

file

6年前 评论

你应该在 showTable 的方法里面 dd() , 可以先dd下short_by 这个参数有没有值
如果没有值的话 建议你加一个默认值, 因为你路由定义的是可选参数, 需要默认值才行

public function showTable($short_by = 'pos')
{
  var_dump($short_by);
  $sales = ...
  dd($sales);
  // TODO
}
6年前 评论

解决了,多谢 。我发现问题出在哪里了,我的一个reource 路由定义的是/pos_table
实现排序和搜索的路由也定义的/pos_table/{sort_by?} 我尝试的时候把排序的路由改成/pos/{sort_by?}就行了
我也不知道为什么....多谢大家帮助

file。。

6年前 评论

參考 https://learnku.com/docs/laravel/5.6/contr...

补充资源控制器
如果你想为一个资源控制器在默认的资源路由之外增加额外的路由,你应该在调用Route::resource之前定义这些路由。否则由 resource 方法定义的路由可能会无意中优先于你补充的路由

因為聲明先後的關係,你的路由進入的入口是 pos_table/{id} ,而非 pos_table/{sort_by?}

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!