Php Laravel路由中未知键值对的处理

Php Laravel路由中未知键值对的处理,php,laravel,Php,Laravel,我有一个应用程序正在迁移到使用Laravel,URL可以有不同的结构,例如: /nightowl/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/catid/ALL/pagenumber/1/ 这是: /nightowl/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/keyword/frogs/ 两者都是有效的URL,当前路由器是YAF框架的一部分,路由如下: "/:tool/search/*"

我有一个应用程序正在迁移到使用Laravel,URL可以有不同的结构,例如:

/nightowl/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/catid/ALL/pagenumber/1/
这是:

/nightowl/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/keyword/frogs/
两者都是有效的URL,当前路由器是YAF框架的一部分,路由如下:

"/:tool/search/*"
它为控制器提供了一个数组,其中
'/search/'
之后的所有内容都是键值对

我一直把头撞在墙上,想弄明白这在拉雷维尔是怎么做到的,我开始觉得这可能是不可能的


如果不是,我该怎么做才能让它成为可能

正如我在评论中提到的,您使用的URL结构可能不是Laravel在查询字符串中处理自己的参数/参数的方式。例如,CakePHP格式是
/controller/action/param:value/param:value/

您可能需要编写自己的代码段,以便将URL转换为Laravel能够识别的格式:

编辑:
快速浏览一下Laravel文档,我觉得它没有设置为在URL的参数中使用键/值对。请看一看上面的这个问题,以便讨论同样的问题并使用GET变量:

正如我在评论中提到的,您使用的URL结构可能不是Laravel在查询字符串中如何处理自己的参数/参数。例如,CakePHP格式是
/controller/action/param:value/param:value/

您可能需要编写自己的代码段,以便将URL转换为Laravel能够识别的格式:

编辑:
快速浏览一下Laravel文档,我觉得它没有设置为在URL的参数中使用键/值对。请看一看上面的这个问题,以便讨论同样的问题并使用GET变量:

正如我在评论中提到的,您使用的URL结构可能不是Laravel在查询字符串中如何处理自己的参数/参数。例如,CakePHP格式是
/controller/action/param:value/param:value/

您可能需要编写自己的代码段,以便将URL转换为Laravel能够识别的格式:

编辑:
快速浏览一下Laravel文档,我觉得它没有设置为在URL的参数中使用键/值对。请看一看上面的这个问题,以便讨论同样的问题并使用GET变量:

正如我在评论中提到的,您使用的URL结构可能不是Laravel在查询字符串中如何处理自己的参数/参数。例如,CakePHP格式是
/controller/action/param:value/param:value/

您可能需要编写自己的代码段,以便将URL转换为Laravel能够识别的格式:

编辑:
快速浏览一下Laravel文档,我觉得它没有设置为在URL的参数中使用键/值对。看看上面的这个问题,它讨论了同样的事情,并使用GET变量来代替:

Laravel没有办法以这种方式从url映射
键=>值,因此您有两个选择

1) 修改你的应用程序,使其创建 /夜猫子/搜索?endtimefrom=3&endtimeto=7®ion=EBAY-GB&catid=ALL&pagenumber=1

2) 在laravel有机会绘制路线图之前,自己分析路线。 具体来说,我指的是劫持当前请求,解析出url,将其重写为上述格式,然后在Laravel中替换当前请求实例

3) 在控制器中执行此操作(可能是最简单的) 使用
route::get('{tool}/search/{params?}',的路由SearchController@doSearch)

然后,您可以在其中解析控制器

class SearchController extends BaseController {

    public function doSearch($tool, $params = '')
    {
        $params = explode('/', $params);
        $mappedParams = [];
        for($i = 0; $i < count($params); $i+2){
            $mappedParams[$params[$i]] = $params[$i+1];
        }

        //$params should now contain a key/value map
    }

}
使用此路线夜猫子/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/catid/ALL/pagenumber/1

在您的控制器中,您将与

$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    keyword     => frogs
)
$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    catid       => ALL
    pagenumber  => 1
)

Laravel没有办法以这种方式从url映射
key=>value
,因此您有两种选择

1) 修改你的应用程序,使其创建 /夜猫子/搜索?endtimefrom=3&endtimeto=7®ion=EBAY-GB&catid=ALL&pagenumber=1

2) 在laravel有机会绘制路线图之前,自己分析路线。 具体来说,我指的是劫持当前请求,解析出url,将其重写为上述格式,然后在Laravel中替换当前请求实例

3) 在控制器中执行此操作(可能是最简单的) 使用
route::get('{tool}/search/{params?}',的路由SearchController@doSearch)

然后,您可以在其中解析控制器

class SearchController extends BaseController {

    public function doSearch($tool, $params = '')
    {
        $params = explode('/', $params);
        $mappedParams = [];
        for($i = 0; $i < count($params); $i+2){
            $mappedParams[$params[$i]] = $params[$i+1];
        }

        //$params should now contain a key/value map
    }

}
使用此路线夜猫子/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/catid/ALL/pagenumber/1

在您的控制器中,您将与

$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    keyword     => frogs
)
$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    catid       => ALL
    pagenumber  => 1
)

Laravel没有办法以这种方式从url映射
key=>value
,因此您有两种选择

1) 修改你的应用程序,使其创建 /夜猫子/搜索?endtimefrom=3&endtimeto=7®ion=EBAY-GB&catid=ALL&pagenumber=1

2) 在laravel有机会绘制路线图之前,自己分析路线。 具体来说,我指的是劫持当前请求,解析出url,将其重写为上述格式,然后在Laravel中替换当前请求实例

3) 在控制器中执行此操作(可能是最简单的) 使用
route::get('{tool}/search/{params?}',的路由SearchController@doSearch)

然后,您可以在其中解析控制器

class SearchController extends BaseController {

    public function doSearch($tool, $params = '')
    {
        $params = explode('/', $params);
        $mappedParams = [];
        for($i = 0; $i < count($params); $i+2){
            $mappedParams[$params[$i]] = $params[$i+1];
        }

        //$params should now contain a key/value map
    }

}
使用此路线夜猫子/search/endtimefrom/3/endtimeto/7/region/EBAY-GB/catid/ALL/pagenumber/1

在您的控制器中,您将与

$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    keyword     => frogs
)
$tool:         nightowl
$mappedParams: Array
(
    endtimefrom => 3
    endtimeto   => 7
    region      => EBAY-GB
    catid       => ALL
    pagenumber  => 1
)

Laravel没有办法以这种方式从url映射
key=>value
,因此您有两种选择

1) 修改你的应用程序,使其创建 /夜猫子/搜索?endtimefrom=3&endtimeto=7®ion=EBAY-GB&catid=ALL&pagenumber=1

2) 在laravel有机会绘制路线图之前,自己分析路线。 具体的