Laravel5.5 框架中$request获取不到路由传过来的参数

路由 Route::match(['get', 'post'], '/test/{test}', 'AddCluesController@index'); // 添加线索

控制器:
public function index(Request $request)
{

echo $request->input('post'); // null
print_r($request->all()); // [] 

}

文档中:
获取指定输入值
使用几种简单的方法(不需要特别指定哪个 HTTP 动作),就可以访问 IlluminateHttpRequest 实例中所有的用户输入。也就是说无论是什么样的 HTTP 动作,input 方法都可以被用来获取用户输入数据。

是我的理解有误吗??

阅读 7.4k
3 个回答

Route::match(['get', 'post'], '/test/{test}', 'AddCluesController@index');

getpost 交给同一个控制器同一个方法,不是推荐的方法。

假设目前你确实要这样写,无论是 get 还是 post ,你要获取到 url /test/{test} 中的 {test} 的值,有两种办法:

1.在 index 方法中指定,如下:

public function index($test){
        //your logic.
    }

2.通过 request()->route('test'); 方法。

之所以要这样,是因为这是路由参数,请看官方文档 Route Parameters

其他

对于 GET 请求,如果你是要获取 url (http://www.baidu.com?q=xx&b=xxx)中 ? 后的参数,是可以使用 request()->all() 获取到的。

对于 POST 请求,你要获取到 form 中的所有用户的输入,通过 request()->all() 也是能获取到的。

当然,你可以通过 request()->input(['key1','key2']); 的方式来获取指定内容。

具体的多看下文档和源码,就清楚了。

route(),不是 input()

刚刚写错了.

input() 只是按请求方式, 自动取$_GET, 还是$_POST里面的数据. 不包括路径上的参数.

直接将参数传到控制器中:如下

控制器这样写:
public function index(Request $request, $id)
{

//获取传入的test
$test = Test::find($id);

}

或者这样写
public function index(Request $request, Test $test)
{

//获取传入的test, 直接或根据参数获取了相应的model

}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进