假设我有这样的网址:
这样一个简单的控制器:
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方法。
这是我所拥有的。有什么想法吗?
答案 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'));
你可以
/管理/用户/刷新