如何构建需要特定URL查询参数的Laravel路由?

pro*_*mer 5 php query-parameters laravel laravel-4 laravel-routing

假设我有这样的网址:

  1. localhost/admin/users/ <---主管理员用户页面
  2. localhost/admin/users /?data = refresh <----从该页面发出的典型ajax请求

还有一个像这样的简单控制器:

class UsersController extends Controller {

     public function index()

         // call some services
         // return a view
     }

     public function dataRefresh {

         // call some services
         // return some JSON
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我的routes.php我正在努力:

    Route::get('admin/users', array('as' => 'admin.users', 'uses' => 'Admin\Users\UsersController@index'));
    Route::get('admin/users????' , array('before' => 'ajax', 'as' => 'admin.users', 'uses' => 'Admin\Users\UsersController@dataRefresh'));
Run Code Online (Sandbox Code Playgroud)

我在第二个路径中可以做什么来要求URL查询参数 ?data ,并且还需要将其设置为 data=refresh我如何确保它不与其他路线冲突?

注意:我知道某些人可能不会将此视为"漂亮网址".我在适当的时候实现了漂亮的URL/slugs,但是我也认为在很多情况下查询参数更清晰更清晰(即让用户清楚地了解页面URL的哪一部分用于过滤数据) datagrid ...并确保用户可以删除参数而不会导致页面中断或丢失).谷歌自己以及许多其他声誉良好的网站都是这样做的.

注意:我已将ajax路由过滤器应用于第二个路由.我还设置了路由指向我的控制器中的dataRefresh方法.

这是我所拥有的.有任何想法吗?

The*_*pha 3

Laravel 不使用 a 的查询部分uri进行路由,因为localhost/admin/users?data=refresh您可以使用如下所示的内容:

Route::get('admin/users', function(){
    $data = Input::get('data');
});
Run Code Online (Sandbox Code Playgroud)

您可以使用 向路线发出请求localhost/admin/users?data=refresh。你可以route这样声明你的:

Route::get('admin/users' , array('before' => 'ajax:data', 'as' => 'admin.users', 'uses' => 'Admin\Users\UsersController@dataRefresh'));
Run Code Online (Sandbox Code Playgroud)

在这里,被传递给路由过滤器并在第三个参数( )refresh中可用,因此您可以在 中检索。创建过滤器,如下所示:$paramrefresh$param

Route::filter('ajax', function($route, $request, $param){

    // This will give query string 'refresh'
    // if you passed it as http://domain.com?data=refresh
    $data = $request->get($param);

    // You can retrieve the $param, third argument
    // if you pass a parameter, i.e. 'refresh'
    // param will contain 'refresh'
});
Run Code Online (Sandbox Code Playgroud)