为 symfony 创建的管理控制器生成的 Prestashop 错误令牌

Prestashop wrong token generated for symfony created Admin controller

如果缺少某些信息或者我完全搞砸了问题的解释,请告诉我!

你好, 我想创建一个用于 AJAX 请求的管理控制器。我在 Prestashop dev docs website 上使用此文档创建了它。问题是,看在上帝的份上,我无法创建正确的令牌来访问该控制器。我尝试了函数 Tools::getAdminTokenLite("AdminModules") 我尝试了正常的 Tools:GetAdminToken 并且令牌总是不正确。

我尝试了什么: http://localhost:8001/admin395pdq48a/modules/STLuploader/images?controller=ImageSTL&action=getimages&token=8346c9bf702c3fc0712271250925e419

token 由上述getAdminTokenLite 生成。 Return 是不是找不到 404,我会说这很奇怪为什么我尝试用不同的方式制定控制器的名称却没有用?

http://localhost:8001/admin395pdq48a/modules/STLuploader/images?action=getimages&token=8346c9bf702c3fc0712271250925e419

Return 是 302 且令牌无效。
唯一有效的是当我点击我接受安全风险并且 URL 是: http://localhost:8001/admin395pdq48a/modules/STLuploader/images?_token=g5AZ8GEscofUtruxoKBeTyQPlmgQiZvsH8d14Zc5YyM 我不知道 _token 是如何生成的,它的长度与其他令牌不同。当我在管理员中查看“模块管理器”选项卡时,我可以看到相同的标记,在 URL 中是相同的标记。 我究竟做错了什么?我很沮丧,我试图解决这个问题 2 天,但没有希望。请告诉我哪里搞砸了。

这是routes.yml

image_route:
    path: STLuploader/images
    methods: [POST, GET]
    defaults:
      _controller: 'STLuploader\Controller\ImageSTLController::getimagesAction'
test_route:
    path: STLuploader/test
    methods: [POST, GET]
    defaults:
      _controller: 'STLuploader\Controller\testController::testAction'

这里是控制器:

<?php

namespace STLuploader\Controller;

use PrestaShop\PrestaShop\Adapter\Entity\Tools;
use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
use Symfony\Component\HttpFoundation\JsonResponse;

class ImageSTLController extends FrameworkBundleAdminController
{
    public function getimagesAction(){

        $id_product = Tools::getValue("product_id");
        $response = new JsonResponse($id_product);
        return $response;
    }
}

composer.json:

{
    "name": "jiri-svitil/stluploader",
    "description": "STL uploader and management module",
    "authors": [
        {
            "name": "Jiří Svítil",
            "email": "jirka.svitil@gmail.com"
        }
    ],
    "require": {
        "php": ">=5.6.0"
    },
    "autoload": {
        "psr-4": {
            "STLuploader\Controller\": "src/Controller"
        }
       
    },
    "config": {
        "prepend-autoloader": false
    },
    "type": "prestashop-module",
    "author": "Jiří Svítil",
    "license": "GNU GPL v2"
}

Prestashop 版本:1.7.5 非常感谢您的宝贵时间。

所以,首先,我想说我讨厌 Prestashop 的开发者,他们没有把这个写进文档。 其次是我的解决方案: 如果你创建的管理控制器在 Symfony 中定义了路由,你只需要知道路径名是什么,在我的例子中是“image_route”。比你需要得到 Symfony 路由器实例。您可以通过将其添加到文件顶部 use PrestaShop\PrestaShop\Adapter\SymfonyContainer; 并获取路由器实例 $router = SymfonyContainer::getInstance()->get('router'); 来实现。之后,您可以使用此函数生成从路径名创建的 URL:$router->generate("image_route")。仅此而已。

如果有人想为此提供帮助,我很乐意这样做。我认为这是违反基本人权的。