symfony - 覆盖控制器形式 Prestashop 1.7.7
问题描述
请问,有没有人有 Prestashop 1.7.7 的管理员控制器覆盖示例(基于 symfony)
谢谢您的回答。
解决方案
我为此创建了一个示例模块,可以从这里下载(在 Releases 下)。
覆盖特定路由的过程/adminXXXX/index.php/sell/orders/
是这样的:
- 你在你的项目中创建了一个 Symfony 控制器(代码再往下一点)。我在里面创建它们
src/Controller
,这是约定。该控制器必须扩展类PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController
。我使用作曲家自动加载器加载我的类,所以这里是设置:
"autoload": {
"psr-4": {
"Skaparate\\": "src/"
},
"classmap": [
"sk_testmodule.php"
],
"exclude-from-classmap": []
},
- 您需要
config
在项目的根目录中创建一个文件夹。这很重要,因为 PrestaShop 将从那里加载路由和服务。 routes.yml
在先前创建的文件夹中创建一个名为的文件。- 在里面
routes.yml
定义你想要覆盖的路线。在这种情况下,路由被称为admin_orders_index
,因此我们这样写:
admin_orders_index:
path: /sell/orders/
# POST is required because admin_order_index is also setup as the grid reset return route.
methods: [GET,POST]
defaults:
_controller: 'Skaparate\Controller\Admin\CustomOrdersController::indexAction'
_disable_module_prefix: true
- 最后,这是实际的控制器:
<?php
namespace Skaparate\Controller\Admin;
if (!defined('_PS_VERSION_')) {
die;
}
use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
use PrestaShopBundle\Security\Annotation\AdminSecurity;
use PrestaShopBundle\Security\Annotation\ModuleActivated;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class CustomOrdersController extends FrameworkBundleAdminController
{
/**
* Shows list of orders
*
* @param Request $request
* @param OrderFilters $filters
*
* @return Response
*/
public function indexAction(Request $request)
{
return $this->render(
'@Modules/sk_testmodule/views/templates/admin/sell/order/index.html.twig',
[
'enableSidebar' => true,
]
);
}
}
该项目结构将是:
├── composer.json
├── composer.lock
├── config
│ └── routes.yml
├── README.md
├── sk_testmodule.php
├── src
│ └── Controller
│ └── Admin
│ └── CustomOrdersController.php
└── views
└── templates
└── admin
└── sell
└── order
└── index.html.twig
当然,您需要创建文件views/templates/admin/sell/orders/index.html.twig
. 我把它放在维护 PrestaShop 结构的路径中,但这不是必需的。
作为参考,Symfony 路由定义在src/PrestaShopBundle/Resources/config/routes
(相对于 PrestaShop 安装)。
问候!
推荐阅读
- css - 仅在设置类存在时应用 CSS 规则,而不是其他类
- javascript - 如何在 macOS 上使用水平滚动来模拟滑动删除?
- python - 警告:matplotlib.legend:没有找到带有标签的句柄放在图例中
- performance - 提高协同仿真 Adams/Matlab 的性能
- docusignapi - Docusign 连接 - 信封标志完成和 Docusign 触发 Https Post 请求之间的预期延迟时间是多少
- openshift - Openshift CLI:将 .kube 文件夹更改为不同的驱动器
- javascript - 需要讨论下一个 JS 浅选项的动态路由
- javascript - 使用 combineReducer 组合我的减速器后,动作未调度
- pypubsub - Laravel 框架发布订阅
- firebase - Flutter & Firebase:返回集合列表