Symfony路由的属性

rsl1atfo  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(154)

在Symfony控制器中,路由定义如下:

class BlogController extends AbstractController
{
    #[Route('/blog/{page}', name: 'blog_list', requirements: ['page' => '\d+'])]
    public function list(int $page): Response
    {
        // ...
    }
}

现在想象一下,你在这个url中有一个请求或查询参数,没有必要在路由中定义它,它可以通过$request->get('parameter_name')访问。

class BlogController extends AbstractController
{
    #[Route('/blog/{page}', name: 'blog_list', requirements: ['page' => '\d+'])]
    public function list(Request $request, int $page): Response
    {
        $id = $request->get('id');
    }
}

但我想知道是否将此参数定义为attribute会更清楚。对于这样的示例:

class BlogController extends AbstractController
{
    #[Route('/blog/{page}', name: 'blog_list', requirements: ['page' => '\d+', 'id' => '\d+'])]
    public function list(Request $request, int $page): Response
    {
        $id = $request->get('id');
    }
}

但在这种情况下,Symfony不会检查属性的类型(即,类似/blog/1?id=“foo”的URL将起作用)。
所以也许像这样带注解的东西

class BlogController extends AbstractController
    {
        
    /**
     * @param int id Id of the post to be highlighted
     */
    #[Route('/blog/{page}', name: 'blog_list', requirements: ['page' => '\d+', 'id' => '\d+'])]
        public function list(Request $request, int $page): Response
        {
            $id = $request->get('id');
        }
    }
}

或者可以像Laravel的here建议的那样:

class BlogController extends AbstractController
    {
        
   /**
    * Returns list of posts. 
    * Request object may have optional query int parameter 'id'
    * used for highlighting a specific post
    *
    * @param Request $request
    * @return Response
    */
    #[Route('/blog/{page}', name: 'blog_list', requirements: ['page' => '\d+', 'id' => '\d+'])]
        public function list(Request $request, int $page): Response
        {
            $id = $request->get('id');
        }
    }
}

那么,什么是一个清晰和良好记录的代码的最佳选择呢?

d6kp6zgx

d6kp6zgx1#

我也在搜索这个问题。没有办法说明参数和返回类型,比如属性。我认为现在混合注解和属性是可以的。也许它会在以后的php版本中可用

相关问题