【问题标题】:Symfony 5 Route name in Controller控制器中的 Symfony 5 路由名称
【发布时间】:2020-09-03 12:25:25
【问题描述】:

如何在 Symfony 5 的控制器中获取当前路由的名称? 当我尝试这个时,我得到 NULL:

$this->Request = Request::createFromGlobals();
$route = $this->Request->attributes->get('_route');

var_dump($route);

【问题讨论】:

  • 如果您这样做,您将创建一个仅填充 PHP 超全局变量($_GET、$_POST 等)的新请求实例。这在 public/index.php 中完成。在请求的过程中,它由框架填充几个信息,如路由名称。您将不得不根据您的上下文尝试一种方法来检索此请求实例

标签: symfony symfony5


【解决方案1】:

不建议在控制器中创建请求。 获取已创建请求的首选方式是 DI 和自动装配:

// src/Controller/BlogController.php
namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class BlogController extends AbstractController
{
    /**
     * @Route("/blog", name="blog_list")
     */
    public function list(Request $request)
    {
        $routeName = $request->attributes->get('_route');
        $routeParameters = $request->attributes->get('_route_params');

        var_dump($routeName);
    }
}

此请求由 Symfony HttpKernel 处理并填充附加信息。

更多信息:https://symfony.com/doc/current/routing.html#getting-the-route-name-and-parameters

它是如何到达那里的:https://github.com/symfony/symfony/blob/b2609c4bae69ca383b97cb520da2ed9be1c48449/src/Symfony/Component/Routing/Matcher/UrlMatcher.php#L217

【讨论】:

    【解决方案2】:

    找到答案here

    只需将RequestStack添加为函数参数并调用RequestStack->getCurrentRequest()->get('_route');

    use Symfony\Component\HttpFoundation\RequestStack;
    
    public function yourCalledFunction(Utilities $u, RequestStack $requestStack) {
    
        $route = $requestStack->getCurrentRequest()->get('_route');
    }
    

    【讨论】:

    • 几乎,但对于控制器操作,您只需使用直接注入控制器操作的请求对象。请求栈用于其他非控制器服务,只会被注入到构造函数中。
    • 我在我的项目中尝试了这个解决方案,它在一个带有注释路由的控制器操作上工作。
    • 是的,它可以工作,但不需要。只要您针对 Request 输入提示,控制器操作将始终注入当前路由。将堆栈用于控制器只会误导显然是新手的开发人员。
    • 顺便说一句,如果您认为该问题已由另一个问题中的答案回答,那么推荐的方法是在评论部分提供一个链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2018-08-15
    相关资源
    最近更新 更多