You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问包含数组的对象属性?Drupal中$steps取值报错如何解决

问题原因
  • 你的$steps变量本身是Drupal\form\Manager\StepManager类的对象实例,不是数组,无法直接用$steps[1]的数组下标方式读取内部存储的步骤列表
  • 你要访问的steps(StepManager类的属性)、values(StepOne类的属性)都是*受保护(protected)*类型,PHP语法不允许直接在类外部访问受保护/私有属性,你直接写->values调用本身就是非法的
解决方案

Drupal的自定义业务类通常会为受保护属性提供公开的Getter方法,你可以按以下步骤取值:

  1. 先调用StepManager类的getSteps()方法获取内部存储的步骤数组:
$stepList = $steps->getSteps();
  1. 从步骤数组中取出索引为1的StepOne对象
$stepOne = $stepList[1];
  1. 调用StepOne类的getValues()方法获取内部存储的数值数组,再读取对应的key值
$values = $stepOne->getValues();
$targetKey = $values['key'];

如果对应类没有提供现成的Getter方法,你可以在对应类中新增公开的读取方法:

  • 在Drupal\form\Manager\StepManager类中新增:
public function getSteps() {
  return $this->steps;
}
  • 在Drupal\form\Step\StepOne类中新增:
public function getValues() {
  return $this->values;
}

不推荐用反射方式强行读取受保护属性,不符合Drupal的编码规范,后续版本升级容易出现兼容性问题。

内容的提问来源于stack exchange,提问作者Boby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:15:05