为创建的Admin控制器生成的symfony的prestshop错误令牌



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

你好,我想创建一个用于AJAX请求的Admin控制器。我在prestshop开发文档网站上创建了这个文档。问题是,我不能为访问控制器创建正确的令牌。我尝试了功能Tools::getAdminTokenLite("AdminModules"),我尝试了正常的Tools:GetAdminToken,总是令牌不正确。

我试过的:http://localhost:8001/admin395pdq48a/modules/STLuploader/images?controller=ImageSTL&action=getimages&token=8346c9bf702c3fc0712271250925e419

令牌由上面描述的getAdminTokenLite生成。返回404没有找到,我会说这很奇怪,为什么404我试图以不同的方式制定控制器的名称没有工作?

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

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

这是routes.yml

image_route:
path: STLuploader/images
methods: [POST, GET]
defaults:
_controller: 'STLuploaderControllerImageSTLController::getimagesAction'
test_route:
path: STLuploader/test
methods: [POST, GET]
defaults:
_controller: 'STLuploaderControllertestController::testAction'

这是控制器:

<?php
namespace STLuploaderController;
use PrestaShopPrestaShopAdapterEntityTools;
use PrestaShopBundleControllerAdminFrameworkBundleAdminController;
use SymfonyComponentHttpFoundationJsonResponse;
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"
}

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

所以,首先,我想说我讨厌Prestashop的开发者,他没有把这些写进文档。第二是我的解决方案:如果你让admin控制器在Symfony中定义了路由,你只需要知道路径名是什么,在我的例子中它是"image_route"。然后你需要得到Symfony路由器实例。您可以通过将此添加到文件use PrestaShopPrestaShopAdapterSymfonyContainer;的顶部并获得路由器实例$router = SymfonyContainer::getInstance()->get('router');来做到这一点。之后,您可以使用该函数生成从路径名$router->generate("image_route")创建的URL。

如果有人想帮助我,我很高兴这样做。我认为这是违反基本人权的发现自己。

最新更新