Php Symfony2检查Db上的路由
关于Symfony2和路线的一个问题 在我的路由文件中,我有以下路由:Php Symfony2检查Db上的路由,php,symfony,routes,Php,Symfony,Routes,关于Symfony2和路线的一个问题 在我的路由文件中,我有以下路由: offers_category: pattern: /offers/{category} defaults: { _controller: MyBundle:Offers:category} 通过这种方式,我可以调用任何url,所有url都将以200(HTTP代码)响应。 类别列表是动态的,由管理面板(使用Sonata创建)插入并保存在db上 我想检查“类别”是否存在,然后用200或404回复。 有一种方法
offers_category:
pattern: /offers/{category}
defaults: { _controller: MyBundle:Offers:category}
通过这种方式,我可以调用任何url,所有url都将以200(HTTP代码)响应。
类别列表是动态的,由管理面板(使用Sonata创建)插入并保存在db上
我想检查“类别”是否存在,然后用200或404回复。
有一种方法可以告诉Symfony2(在路由文件中)占位符可用的字典吗
我认为我必须检查我的控制器内部,调用db上的查询,但我希望找到一个更好或更干净的解决方案
谢谢大家
我找到了解决办法! 感谢@lenybernard在其帖子中提供的宝贵建议 使用@lenybernard解决方案,我能够使用索引字段配置路由,如:
www.sitename.com/offers/1
但我需要一个url,如:
www.sitename.com/offers/travel
为此,我使用此方法将未编制索引的标签映射到url:
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"}})
*/
…一切都会成功 有一个简单而好的方法叫做to do,但是在路由文件中没有直接的操作(而且这不是它的角色),您是对的,这是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:Offers/category对象
请求属性(请求属性来自路由占位符
--这里是id);如果未找到类别对象,则生成404响应;如果找到类别对象,将定义新的类别请求属性
(可通过$request->attributes->get('category')访问);至于其他
请求属性,它将自动注入控制器
当存在于方法签名中时。如果使用中的类型提示
在上面的示例中,您甚至可以省略@ParamConverter注释
因为它是自动的:
所以你只要转换变量,param转换器就会自动抛出404,酷吧
use My\Bundle\MyBundle\Entity\Offers\Category;
class OffersController
{
/**
* @param Category $category
*/
public function showAction(Category $category)
{
...
}
}
谢谢@lenybernard,我找到了解决方案,在我的帖子上面你可以找到我的解决方案。谢谢我只需将{category}变量重命名为{name},如果没有@ParamConverter注释和填充映射选项,它也会起作用:打火机,我们一眼就能知道路由的参数是什么(而不是不指示exptected属性的category)。嗨!如果没有@ParamConverter注释id,则该注释id不适用于类别标签,而仅适用于类别id。因此,如果我删除@ParamConverter注释,则仅适用于这些路由
www.sitename.com/offers/1
或www.sitename.com/offers/2
,而@ParamConverter则适用于这些路由www.sitename.com/offers/travel
和www.sitename.com/offers/wellness
。也许有什么地方不对劲,但还是管用的,我能用某种方式改进它吗?谢谢