如何从url中获取很多参数而没有(&)?

时间:2019-09-03 11:01:24

标签: php laravel laravel-5 routing route-model-binding

目前在Laravel中,我正在测试url,并且在路由中我已经拥有

example.com/game/location/1/action/update/screen/main

在控制器中,当我想传递参数时,我必须输入

example.com/game/?location=1&screen=main

如果我只想通过位置和屏幕,则我在URL中出现错误原因第二个参数应该采取措施。

我可以创建

这样的网址
example.com/game/location/1/screen/main

和控制器$ request->屏幕和位置工作正常。但是有什么办法不使用&吗?并像这样:

Y

2 个答案:

答案 0 :(得分:1)

此路线

elements = driver.find_elements_by_xpath("//table/descendant::a[@class='qtooltip']/b")
for element in elements:
    print(element.text)

在GameController索引方法中,您可以将这些参数获取为

Route::get('/locations/{location?}/actions/{action?}/screens/{screen?}','GameController@index')->name('locations.actions.screens.show');

如果您使用的是路由模型绑定,

如果不使用

public function index(Location $location, Action $action, Screen $screen) {
    // here you can use those models
}

如果路线名称为public function index($location, $action, $screen) { // here you can use these variables } ,那么在视图中,它将为

locations.actions.screens.show

现在,如果您有一些查询参数

然后它就像$ XPath Operators & Functions“一些测试数据”&another_test =“另一个测试”

您可以像访问这些参数一样

<a href="{{ route('locations.actions.screens.show', ['location' => $location, 'action' => $action, 'screen' => $screen ]) }}">Test</a>

让我们考虑您要检索所有属于某个特定屏幕,属于一个特定动作且属于某个特定位置的游戏,您的网址似乎在您的问题中,在这种情况下,该网址将是

public function myfunction(Request $request) {
    dd($request->all());
}

网址似乎是Route::group(['prefix' => 'game'], function (){ Route::get('locations/{location?}/actions/{action?}/screens/{screen?}','GameController@index')->name('game.index'); }); ,其中的操作和屏幕参数可以是可选的

现在在您的控制器index()方法中

game/locations/1/actions/1/screens/1

答案 1 :(得分:1)

您的错误是有道理的

  

URL第二个参数应该是动作

因为您的路线带有通配符位置,操作和屏幕

Route::group(['prefix' => 'game'], function (){ 
 Route::get('/location/{location?}/action/{action?}/screen/{screen?}','GameController@index')->name('game.index');
});

要访问此路由,您必须使用

之类的通配符生成URL。
example.com/game/location/1/screen/main

example.com/game/?location=1&screen=main由于您的路线URL而无法正常工作,因此无法像$request->screen那样访问。

因此您的控制器必须类似于

public function index($reuest, $location, $action, $screen){

}

您可以直接访问$location, $action, $screen,如果您要求类似

example.com/game/location/1/screen/main?param1=1&param2=2

可以通过诸如 $request->param1$request->param2

有时,您可能需要指定一个路由参数,但使该路由参数的出现为可选。您可以通过放置一个?在参数名称后标记。确保为路由的相应变量赋予默认值:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

您可以使用基于模式的过滤器 您还可以根据其URI指定过滤器应用于整个路由集。

Route::filter('admin', function()
{
    //
});

Route::when('admin/*', 'admin');