Silverstripe-SAML 中如何让自定义 asArray() 生效?
数据小陈
结论
从给出的 saml.yml 片段看,Injector 下的缩进需要先修正。现在 SAMLConfService 与 SilverStripe\Core\Injector\Injector 位于同一层级,因此没有作为 Injector 配置的子项,预期的服务映射也就不会按这个结构注册。
SilverStripe\Core\Injector\Injector:
SAMLConfService: MySAMLConfiguration
请保留模块文档指定的服务标识,并确认 SAMLConfiguration 实例实际使用的就是这个标识。仅凭问题中的片段,无法确定 SAMLConfService 是否是当前模块版本的正确服务名。
检查配置注册
- 修正缩进,并检查 YAML 文件是否还有其他格式错误。
- 确认
After: '#samlsettings'中的配置名称与模块实际使用的名称一致。配置顺序正确,并不能说明服务标识也正确。 - 确认 Silverstripe 能自动加载
MySAMLConfiguration,包括类名、命名空间和文件位置是否符合项目的自动加载规则。 - 修改配置后,执行项目要求的配置重建或缓存刷新,再次触发 SAML 配置读取。否则,旧配置可能仍在生效。
- 在
asArray()开头临时添加一条日志,确认请求是否进入读取 SAML 配置的流程。如果没有日志,再检查实际使用的服务标识和配置加载顺序。
检查自定义类
问题中的 MySAMLConfiguration 没有继承 SAMLConfiguration。如果模块对该服务有具体的类或接口要求,只提供一个同名方法未必符合要求。请查阅当前模块文档,确认自定义类需要继承的类、命名空间和方法签名。如果需要继承,应使用文档中的完整类名,并保留父类要求的构造或初始化行为。
日志可以确认方法是否执行,但不会改变 Injector 的服务绑定:
Utils::SendDebugLog('Settings: ' . print_r($settings, true));
修正 YAML 缩进后,如果方法仍未调用,请检查服务标识、配置是否已重建,以及自定义类是否符合模块对服务类型的要求。问题中没有提供模块版本号、完整的文档示例或运行时错误,因此无法据此确定具体的服务标识,也无法确认该类必须采用哪种继承方式。
备注:内容仅供参考。
