您的位置:首页 > 其它

symfony2中有规律的动态路由

2016-01-14 17:41 573 查看
比如我现在有3个路由

mall_goods_list_by_price_or_sales_or_create_time:
    path:      /goods/list_by_price

defaults:  {_controller:MallBundle:Goods:listByPrice}


mall_goods_list_by_price_or_sales_or_create_time:
    path:      /goods/list_by_sales

defaults:  {_controller:MallBundle:Goods:listBySales
}


mall_goods_list_by_price_or_sales_or_create_time:
    path:      /goods/list_by_create_time
defaults:  {_controller:MallBundle:Goods:listByCreateTime}

大家会发现每个path都有共同的部分 /goods/list_by_

这其实在symfony2中的文档中其实提出了解决的方法

路由方面这么写

mall_goods_list_by_price_or_sales_or_create_time:
    path:      /goods/list_by_{condition}  (这就相当于一个占位符了)
defaults:  {_controller:MallBundle:Goods:listByCondition}
requirements:  {condition: price|sales|create_time} (这么写是为了告诉框架,只有有其中3个值的之一我才有这个路径)


控制器中这么写

/**
* 按所给条件(价格,销售值,时间)获取商品列表
*/
public function listByConditionAction(request $request, $condition)
{
$warehouseId = trim($request->request->get('categoryId'));
$page = (int) $request->request->get('page');
$order = trim($request->request->get('order'));
if (empty($order)) {
$order = 'DESC';
}

if ($page < 1) {
$page = 1;
}
$pageSize = (int) $request->request->get('$pageSize');
if (!in_array($pageSize, array(8, 16))) {
$pageSize = 8;
}

$sort_field = array(
'price' => 'minPrice',
'create_time' => 'createTime',
'sales' => 'sales',
);

$repository = $this->getDoctrine()->getRepository('AppBundle:Goods');
$goodsList = $repository->findBy(
array(
'warehouseId' => $warehouseId,
'status' => 0,
),
array($sort_field[$condition] => $order ),
$pageSize,
$pageSize * ($page - 1)
);
$ret = $this->_getListByCondition($warehouseId, $goodsList);

return new JsonResponse($ret);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: