符号路线的属性
在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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我也在搜索这个问题。无法说明参数和返回类型的通过属性。我认为现在可以混合注释和属性。可能会在以后的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