在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');
}
}
}
那么,什么是一个清晰和良好记录的代码的最佳选择呢?
1条答案
按热度按时间d6kp6zgx1#
我也在搜索这个问题。没有办法说明参数和返回类型,比如属性。我认为现在混合注解和属性是可以的。也许它会在以后的php版本中可用