通过" \"和" /"通过Laravel Route变量

时间:2016-03-31 12:34:43

标签: php laravel laravel-5.2 laravel-routing

首先,如果这是一个糟糕的问题/做法,请道歉。我对Laravel来说很新,所以我仍然可以掌握它。

我尝试在Laravel 5路线中传递包含正斜杠(/)和反斜杠()的变量,并且我遇到了一些困难。

我使用以下内容:api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg==

尝试1:

我的第一次尝试使用了以下代码,自然导致了404。

路线:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::resource('service', 'ServiceController');
});

控制器:

public function show($service) {
    return $service;
}

结果:

404

尝试2:

我在StackOverflow上进行了一些搜索并最终使用了以下代码,这几乎可以正常工作,但是,它似乎正在将\转换为/.

路线:

Route::group(array('prefix' => 'api/v1'), function() {
    Route::get('service/{slashData}', 'ServiceController@getData')
    ->where('slashData', '(.*)');
});

控制器:

public function getData($slashData = null) {
    if($slashData) {
        return $slashData;
    }
}

结果:

DfDte//uM5fy582WtmkFLJg==

正如您所看到的,它传递了var但似乎正在将\转换为/.

我试图创建一个API,不幸的是,我传递的变量不受我的控制(例如我不能使用\或/)。

有没有人有任何建议或能指出我正确的方向?

感谢。

2 个答案:

答案 0 :(得分:0)

你不应该这样做。 Laravel会认为这是一个新参数,因为“/”。相反,请在参数中使用htmlentititeshtml_entity_decode,或使用POST

答案 1 :(得分:0)

正如您从原始问题的评论中看到的那样,我试图在URL中传递的变量是我之前使用json_encode的先前API调用的结果。 json_encode将自动尝试并转义正斜杠,因此将额外的\添加到变量中。我在原始呼叫中添加了JSON_UNESCAPED_SLASHES标志,瞧,一切都按预期工作。