fosjsrouting 转储不正确的路径

fosjsrouting dumping incorrect paths

我的正常 Symfony 4 路由按预期工作;但是 FOSJsRouting 生成的 url 缺少自动出现在 Twig 生成的 url.

中的 webroot/public 前缀

Twig 调用和输出

{{path(ci_chemical_show,{id:11409}) // http://localhost:8087/CIRdev/public/chemical/show/11409

FOSJsRouting 调用和输出

Routing.generate(ci_chemical_show,{id:11409}) //http://localhost:8087/chemical/show/11409

我的设置

我的 symfony config/routes/annotations.yaml 文件(有效)如下所示:

controllers:
  resource: '../../src/Controller/'
  type: annotation

控制器注释如下所示:

/**
 * Class ChemicalController
 * @package App\Controller\Chemical
 * @Route("/chemical")
 *
 */
class ChemicalController extends AbstractController
{
    /**
     * @Route("/show/{id}", name="ci_chemical_show", requirements={"id"="\d+"}, options={"expose"=true})
     * @param Request $request
     * @param Chemical $chemical
     * @return Response
     */
    public function show(Request $request, Chemical $chemical) {
        return $this->render(':chemical/Chemical:show.html.twig', ['chemical' => $chemical]);
    }

我的config/routes/for_js_routing.yaml文件是默认的:

fos_js_routing:
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing-sf4.xml"

我已经按照 Symfony 4 docs 中的说明安装并配置了 FOSJsRouting。

I 运行 fos:js-routing:dump --format=json --target=public/js/fos_js_routes.json 产生了以下 json, 我认为这是错误的 因为它与 CIRdev/public 其中:

{
 "base_url": "",
 "routes": {
    "ci_chemical_show": {
     "tokens": [
        [
         "variable",
         "\/",
         "\d+",
         "id",
         true
        ],
        [
         "text",
         "\/chemical\/show"
        ]
     ],
     "defaults": [],
     "requirements": {
        "id": "\d+"
     },
     "hosttokens": [],
     "methods": [],
     "schemes": []
    },
//etc.

因为这是一个非常普通的 Symfony 4 设置,我不知道为什么 FOSJsRouting 会这样。想法?

FOS JS 路由(和一般的控制台命令)对安装在子目录中的应用程序一无所知,因为它们无权访问计算它所必需的 RequestContext,因此假设该应用程序是安装在 DocumentRoot.

您生成的路由中的参数 base_url 是一个致命的赠品,可以配置,但您必须手动进行。您可以在 FOS-Js 的 Commands section 中阅读有关此警告的信息。

在 bundle 配置中设置参数 request_context_base_url,但是当您 load your routes via the controller 而不是转储时不需要这样做。您可以通过 运行 bin/console config:dump-reference.

查看所有配置选项