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

时间:2014-03-13 21:13:25

标签: php laravel laravel-4 query-parameters laravel-routing

假设我有这样的网址:

  1. localhost / admin / users / < ---主要管理员用户页面
  2. localhost / admin / users /?data = refresh < ----从该页面发出的典型ajax请求
  3. 这样一个简单的控制器:

    class UsersController extends Controller {
    
         public function index()
    
             // call some services
             // return a view
         }
    
         public function dataRefresh {
    
             // call some services
             // return some JSON
         }
    }
    

    这是我的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'));
    

    在第二条路线中我需要做什么才能要求提供网址查询参数 ?data ,并且还需要将其设置为 data=refresh 我如何确保它与其他路线不冲突?

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

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

    这是我所拥有的。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

Laravel不使用uri的查询部分进行路由,对于localhost/admin/users?data=refresh,您可以使用以下内容:

Route::get('admin/users', function(){
    $data = Input::get('data');
});

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

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

此处,refresh传递给路由过滤器,并在第三个参数($param)中可用,因此您可以在refresh中检索$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'
});

答案 1 :(得分:0)

我认为你最接近你想要的是Route::input

http://laravel.com/docs/routing#route-parameters

  

访问路径参数值

     

如果您需要访问路线之外的路线参数值,那么您   可以使用Route::input方法:

Route::filter('foo', function()
{
    if (Route::input('id') == 1)
    {
        //
    }
});

我个人不会亲自这样做,我只是检查控制器中的参数,如果匹配则执行刷新或改为使用admin/users/refresh路径。

答案 2 :(得分:0)

 Route::get('admin/users/{data?}' , array('before' => 'ajax', 'as' => 'admin.users', 'uses' => 'Admin\Users\UsersController@dataRefresh'));

你可以

/管理/用户/刷新