为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 url 获取大量参数但没有 (&)?

如何从 url 获取大量参数但没有 (&)?

PHP
红糖糍粑 2021-12-24 15:07:25
现在在 Laravel 中我正在测试 url 并且在路由中我有Route::group(['prefix' => 'game'], function (){  Route::get('/location/{location?}/action/{action?}/screen/{screen?}','GameController@index')->name('game.index');});在控制器中,当我想传递参数时,我必须输入example.com/game/location/1/action/update/screen/main如果我只想传递位置和屏幕,我在 url 中有一个错误原因,第二个参数应该是 action。我可以创建像example.com/game/?location=1&screen=main和控制器 $request->screen 和 location 工作正常。但是有什么方法可以不使用 & 吗?并这样做:example.com/game/location/1/screen/main
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

你的错误是有道理的


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');


查看完整回答
反对 回复 2021-12-24
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

对于这条路线


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

在 GameController index 方法中,您可以将这些参数作为


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然后在视图中,它将是


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

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


那么它会像 $ http://example.com/?test="some test data"&another_test="another test"


您可以访问这些参数,例如


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');

});

url 似乎是game/locations/1/actions/1/screens/1action 和 screen 参数可以选择的地方


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


public function index(Location $location, Action $action=null, Screen $screen=null) {

    //using the model instance you received, you can retrieve your games here

}


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 133 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信