Laravel 5 路由参数不发送

Posted

技术标签:

【中文标题】Laravel 5 路由参数不发送【英文标题】:Laravel 5 route parameters not send 【发布时间】:2015-06-25 16:35:17 【问题描述】:

使用 Laravel 5,我无法设置获取路由参数。

我的路线是这样设置的:

Route::get('test', 'TestController@test');

我的 TestController 看起来像这样:

public function test(Request $request)

    var_dump($request->input('foo'));

当我使用参数浏览到该路线时

/test?foo=bar

结果为 NULL。

谁能告诉我我做错了什么?

Input::get('foo') 语法也不起作用(甚至在 L5 的文档中也没有提到)。

更新:

我使用 Apache 作为网络服务器。

我也试过

$request->get('foo')

还有这样的路线

Route::get('test/foo?', 'TestController@test');

使用相同的 URL 仍然为空。

更新 2:

L5 的文档给出了这样的路由示例:

/test/bar

而不是

/test?foo=bar

在 L4 中,可以使用 GET 方式浏览路线

/test?foo=bar&id=2&user=admin

或更改顺序

/test?id=2&user=admin&foo=bar

同一条路线

Route::get('test', 'TestController@test');

你所要做的就是得到它

Input::get('user')

但是使用 L5,当您必须在路由中使用斜杠时,将无法更改参数的顺序,例如

Route::get('test/id/user/foo', 'TestController@test');

这真的是 L5 路线的大降级吗?

【问题讨论】:

我不知道为什么它对你不起作用,但这里证明你可以使用\Illuminate\Http\Request 访问GET 参数:prntscr.com/6viqmv。也许你的 apache 设置有问题。 那真的会在浏览器中返回“bar”吗? 抱歉,在手机上查看了屏幕,没有看到完整的图像。这是在 apache 上运行 Laravel 的 versin 5 吗? 【参考方案1】:

问题出在.htaccess 文件上,我使用了一个编辑过的文件,但没有发送参数。

使用框架附带的默认 .htaccess 文件,一切正常!

【讨论】:

能否请您从您的.htaccess 文件中提取详细信息。可能对未来有用 我遇到了同样的问题。你能详细说明一下htaccess解决方案吗? 您能否详细说明.htaccess 的解决方案? 我没有编辑我的.htaccess,但仍然无法正常工作。我正在使用 Lumen。【参考方案2】:

在 laravel 5 中,您可以像这样将参数放入控制器方法中:

public function test(Request $request, $foo)

带路由 - Route::get('test/foo', 'TestController@test');`

【讨论】:

这仅适用于 /test/bar,但不适用于 /test?foo=bar。我更新了我的问题,解释了为什么这不是一个好的解决方案。 尝试使用$_GET 数组来获取您的值。 这只给了我输入的完整路线。顺便说一句,您不需要在 laravel 中使用 $_GET。【参考方案3】:

你会试试这个吗?

use Request;

public function test(Request $request)

    var_dump($request->get('foo'));

【讨论】:

试过了,结果还是空。我会更新我的问题。 并将路由更改为 Route::get('test', 'TestController@test');您不必为 GET 请求使用路由的参数。 我也试过了,还是不行。是否可以在您的机器上设置一个测试以确保它真的是 laravel 在这里不起作用? 也许您可以使用新的 laravel 安装程序对其(服务器)进行测试。 我有两个使用 laravel 的设置,一个是用 composer 安装的,另一个是用 laravel 安装程序 1.2.0 安装的 - 两者都没有区别,不起作用。

以上是关于Laravel 5 路由参数不发送的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 中一个路由中的多个路由参数模式

Laravel 路由可选参数到控制器

Laravel 5.5登录后重定向到特定路由

Laravel 5.4:从 CSRF 验证中排除带有参数的路由

Laravel 5,子域路由,带可选参数

如何在 Laravel 5 中验证路由参数?