问题描述
如果缺少某些信息或者我完全搞砸了问题的解释,请告诉我!
嗨,
我想创建一个用于 AJAX 请求的管理控制器。我在 Prestashop dev docs website 上使用此文档创建了它。问题是我看在上帝的份上无法创建访问该控制器的正确令牌。我尝试了函数 Tools::getAdminTokenLite("AdminModules")
我尝试了普通的 Tools:GetAdminToken
并且总是令牌不正确。
我尝试过的:
http://localhost:8001/admin395pdq48a/modules/STLuploader/images?controller=ImageSTL&action=getimages&token=8346c9bf702c3fc0712271250925e419
令牌由上述 getAdminTokenLite 生成。返回是 404 not found,我会说这很奇怪为什么 404 我尝试以不同的方式制定控制器的名称没有任何效果?
http://localhost:8001/admin395pdq48a/modules/STLuploader/images?action=getimages&token=8346c9bf702c3fc0712271250925e419
返回 302 和无效令牌。
唯一有效的是当我点击我接受安全风险和 URL 是:
http://localhost:8001/admin395pdq48a/modules/STLuploader/images?_token=g5AZ8GEscofUtruxoKBeTyQPlmgQiZvsH8d14Zc5YyM
我不知道 _token 是如何生成的,它的长度与其他令牌不同。当我查看 admin 中的 Modules Manager 选项卡时,我可以看到相同的标记,在 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")
。仅此而已。
如果有人想帮助解决这个问题,我很乐意这样做。我认为这违反了自己发现这一点的基本人权。