Symfony2检查Db上的路由

时间:2015-01-10 23:39:46

标签: php symfony routes

关于Symfony2和路线的一个问题。

在我的路由文件中,我有这条路线:

offers_category:
    pattern: /offers/{category}
    defaults: { _controller: MyBundle:Offers:category}

通过这种方式,我可以调用任何URL,并且所有URL都将以200(HTTP CODE)响应。 类别列表是动态的,由管理面板(使用Sonata创建)插入并保存在db。

我想检查"类别"存在,然后用200或404作出回应。 有一种方法可以告诉Symfony2(在路由文件中)可用于占位符的字典吗?

我认为我必须检查我的控制器内部调用db的查询,但我希望找到更好或清理的解决方案。

全部谢谢


我找到了解决方案!

感谢@lenybernard在他的帖子上提供了宝贵的建议。

使用@lenybernard解决方案,我能够配置一个带索引字段的路由,如:

www.sitename.com/offers/1

但我需要一个网址:

www.sitename.com/offers/travel

为此,我使用此方法将未编入索引的标签映射到网址:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use NameProject\MyBundle\Entity\Category;

/**
* @Route("/offers/{category}")
* @ParamConverter("type", class="NameProjectMyBundle:Category", options={"mapping": {"category": "name"}})
*/

......并且外行工作!

1 个答案:

答案 0 :(得分:2)

有一种叫做ParamConverter的简单而好的方法,但直接在路由文件中没有任何事情要做(此外这不是它的作用)而你是对的,这是ControllerSide:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use My\Bundle\MyBundle\Entity\Offers\Category;

class OffersController
{
    /**
     * @param Category $category
     * @ParamConverter("category", class="MyBundle:Offers/category")
     */
    public function showAction(Category $category)
    {
        ...
    }
}

正如文档中所述,引发了一些事情:

  

转换器尝试从中获取MyBundle:商品/类别对象   请求属性(请求属性来自路径占位符    - 这里是id);如果未找到Category对象,则生成404响应;如果找到Category对象,则定义新的类别请求属性   (可通过$ request-> attributes-> get('category'))访问;至于其他   请求属性,它会自动注入控制器   当存在于方法签名中时。如果你使用类型提示   在上面的例子中,您甚至可以省略@ParamConverter注释   完全是因为它是自动的:

所以你只需要转换变量,param转换器会自动抛出404,很酷吗?

use My\Bundle\MyBundle\Entity\Offers\Category;

class OffersController
{
    /**
     * @param Category $category
     */
    public function showAction(Category $category)
    {
        ...
    }
}
相关问题