Shopware 6新增后台控制器报无容器设置500错误如何解决
Shopware 6自定义控制器500报错排查解决步骤
该报错的核心原因是继承了Symfony AbstractController的自定义控制器,没有被服务容器识别为服务订阅者,无法注入容器实例导致的,按以下步骤排查修复即可:
步骤1:修正服务注册配置
在插件的src/Resources/config/services.xml中添加控制器的服务定义,标记为服务订阅者:<?xml version="1.0" encoding="UTF-8" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <services> <service id="CustomTest\Controller\BackendController" public="true"> <argument type="service" id="service_container"/> <tag name="controller.service_arguments"/> <tag name="container.service_subscriber"/> </service> </services> </container>配置说明:
public="true"是因为Shopware路由系统需要公开访问控制器服务,controller.service_arguments标签支持控制器方法参数自动注入,container.service_subscriber标记控制器为服务订阅者,可获取容器实例。步骤2:可选的控制器类适配
也可以在控制器类中显式引入ContainerAwareTrait绑定容器,无需在服务配置中传容器参数:<?php declare(strict_types=1); namespace CustomTest\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\DependencyInjection\ContainerAwareTrait; class BackendController extends AbstractController { use ContainerAwareTrait; // 原有路由方法保留即可 }步骤3:修复代码语法错误
你贴出的控制器代码中$response数组末尾多了多余的右括号,会触发语法报错,修正为:$response = [ 'success' => true, 'connected' => false, 'link' => '' ];步骤4:清理缓存生效
修改完配置和代码后执行缓存清理命令:bin/console cache:clear
开发环境也可以直接删除var/cache目录下的所有文件。步骤5:接口验证
你前端的请求路径和路由注解配置的路径完全匹配,缓存清理后重新请求即可正常返回结果。
内容的提问来源于stack exchange,提问作者sandip
相关产品推荐
相关产品推荐

