符号路线的属性

发布于 2025-01-25 08:53:04 字数 2182 浏览 3 评论 0原文

在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');
    }
}

但是我想知道是否不清楚将此参数定义为属性。对于这样的景象:

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不会检查属性的类型(即,url like /blog /1?id =“ foo”将工作)。

,也许会有带有注释的某些内容

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');
        }
    }
}

,或者可能按建议在这里

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');
        }
    }
}

因此 清晰且文化良好的代码的最佳选择是什么?

In Symfony controllers, route are defined as follow :

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

Imagine now, you have a request or query parameter in this url. There's no functional need to define it in the route, it is accessible through $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');
    }
}

But I'm wondering if it is not more clear to define this parameter as attribute. For exemple like this :

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');
    }
}

But in that case, Symfony won't check the type of the attribute (ie, url like /blog/1?id="foo" will work).

So maybe something like this with annotations

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');
        }
    }
}

Or maybe as suggested here for Laravel :

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');
        }
    }
}

So what is the best option for a clear and well documented code ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滿滿的愛 2025-02-01 08:53:04

我也在搜索这个问题。无法说明参数和返回类型的通过属性。我认为现在可以混合注释和属性。可能会在以后的PHP版本中提供

I was searching this question as well. There is no way illustrating params and return types throug attributes. I think mixing annotations and attributes is ok for now. May be it will be available in later versions of php

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文