Symfony 3.4到4.2模拟@ParamConverter类?

时间:2019-01-15 05:16:47

标签: symfony symfony4

这是一种非常方便的方法。

  use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
    ....     
        /**
         * @Route("/test/{id_object}", name="test")
         * @ParamConverter("ObjectEntity", class="Bundle:ObjectEntity", options={"id" = "id_object"})
         */
        public function editTest(ObjectEntity $ObjectEntity, Request $request) {
    .....

    }

现在如何进行参数转换?(Symfony 4)

2 个答案:

答案 0 :(得分:0)

与使用ParamConverter在Symfony3上执行的方法相同。不建议使用SensioFrameworkExtraBundle。

答案 1 :(得分:0)

自Symfony 4.2起,要使用ParamConverter,您将不必使用@ParamConverter注释,而应直接引用实体的类型提示。

所以

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
.....
    /**
     * @Route("/test/{id_object}", name="test")
     * @ParamConverter("ObjectEntity", class="Bundle:ObjectEntity", options={"id" = "id_object"})
     */
    public function editTest(ObjectEntity $ObjectEntity, Request $request) {
.....

}

成为

/**
* @Route("/test/{id}", name="test")
*/
public function editTest(ObjectEntity $obj, Request $req) {
    ....
    //A query is automatically runs to find the ObjectEntity which corresponds with the id sent in the Route
    //so $obj is the ObjectEntity whose $id property matches the id value in the Route, else if id value in the Route doesn't match with the ObjectEntity's id, you will have a 404 page.
}

重要提示:路由中的参数“ id”(“ test / {id}”)必须是ObjectEntity的一个属性。(因此,请使用相同的名称(此处为“ id”))。