【问题标题】:Silverstripe 3: removeByName not workingSilverstripe 3:removeByName 不起作用
【发布时间】:2014-12-01 13:11:07
【问题描述】:

早上好,

我一直在尝试使用 removeByName 方法,但它不起作用。 我基本上是想在由管理对象的 ModelAdmin 生成的表单中隐藏我的 DataObject 中的一个字段。

参见下面的示例代码:

///DataObject snippet...
class MyObject extends DataObject{
   public static $db = array(
       'Title' => 'Varchar',
       'Desc' => 'Text',
       'Template' => 'HTMLText',
   );

   //@Override
   public function getCMSField(){
       $fields = parent::getCMSField();
       $fields->removeByName('Template'); /// DOESN'T WORK!!!
       return $fields;
   }

}//class

注意:我没有收到任何错误。我仍然像往常一样看到表单上的字段(添加和编辑)。

任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 您是否尝试过以不同的方式命名该字段,例如“TemplateTest”?
  • 不,我一开始没有。我刚刚试了一下,还是不行。它仍然以标题“模板测试”的形式显示。不过,感谢您的努力,任何其他想法都非常受欢迎。
  • 如果有人可以告诉/告诉我如何调试函数“getCMSField”,例如对 $fields 变量执行 var_dump 也会很有帮助。谢谢。我试过: Debug::show($fields) [不工作] 即使附加了 url 查询字符串 [?debug=1&isDev=1]。我什至尝试过 die(var_dump($fields)),但我什么也没得到。

标签: field silverstripe data-objects


【解决方案1】:

好的,我找到了问题。

我刚刚第 100 万次再次查看 API,并意识到我将函数命名错误。请参阅下面的更正:

///Correction, forgot to add the 's' at the end of both the function and the parent call.
public function getCMSFields(){
    $fields = parent::getCMSFields();
}

我可以理解该函数的 Apache 日志中没有生成错误,因为它是合法的。但是对于父调用,它应该会产生错误,因为该方法不存在。 (理论:也许,由于该函数实际上从未被调用过,因此父调用没有被执行,因此没有错误[运行时错误]。

【讨论】:

  • 对,你的函数 getCMSField()(不带 s)从未被 SilverStripe 调用过
  • 感谢您的验证。
猜你喜欢
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多