Sylius产品复制功能报错:ResourceController构造函数参数不足
解决Sylius产品复制控制器构造函数参数错误问题
这个错误的核心原因是你自定义的ProductController没有通过Symfony依赖注入容器正确获取ResourceController所需的17个构造参数,以下是具体解决步骤:
1. 确保自定义控制器正确继承Sylius资源控制器
你的自定义控制器必须继承Sylius\Bundle\ResourceBundle\Controller\ResourceController,且不要手动编写构造函数(除非你明确需要扩展逻辑并手动传递所有父类依赖,否则交给容器处理):
<?php namespace App\Controller\Admin; use Sylius\Bundle\ResourceBundle\Controller\ResourceController; use Symfony\Component\HttpFoundation\Response; class ProductController extends ResourceController { public function duplicateAction(): Response { // 获取要复制的产品 $originalProduct = $this->findOr404(); // 编写你的产品复制逻辑 $duplicatedProduct = $this->getFactory()->createNew(); $duplicatedProduct->setCode($originalProduct->getCode() . '-copy'); $duplicatedProduct->setName($originalProduct->getName() . ' (副本)'); // 复制其他字段... $this->getManager()->persist($duplicatedProduct); $this->getManager()->flush(); $this->addFlash('success', '产品已成功复制'); return $this->redirectToRoute('sylius_admin_product_index'); } }
2. 修正services.yaml配置
确保自定义控制器服务继承Sylius资源控制器的配置,让容器自动注入所需依赖:
services: App\Controller\Admin\ProductController: parent: Sylius\Bundle\ResourceBundle\Controller\ResourceController arguments: $metadata: '@sylius.metadata.product' # 指定产品资源的元数据 autowire: true autoconfigure: true tags: ['controller.service_arguments']
parent: Sylius\Bundle\ResourceBundle\Controller\ResourceController会自动继承父服务的所有参数配置,无需手动写全17个参数。
3. 确认_sylius.yaml的资源控制器指向
在config/packages/_sylius.yaml中,将产品资源的控制器指定为你的自定义控制器:
sylius_resource: resources: sylius.product: classes: controller: App\Controller\Admin\ProductController
4. 检查路由配置正确性
确保复制路由的_controller指向正确的方法:
sylius_admin_product_duplicate: path: /admin/products/{id}/duplicate methods: [GET, POST] defaults: _controller: App\Controller\Admin\ProductController::duplicateAction _sylius: permission: true repository: method: find arguments: [$id]
完成以上配置后,清空Symfony缓存(php bin/console cache:clear),重新请求复制接口即可解决参数注入错误。
内容的提问来源于stack exchange,提问作者t-n-y
相关产品推荐
相关产品推荐

