Validation 如何防止Silverstripe将URL段字段值更改为小写?

Validation 如何防止Silverstripe将URL段字段值更改为小写?,validation,silverstripe,Validation,Silverstripe,我的Silverstripe CMS中有一个URLSEMENT字段,我想在那里有一个大写的链接。但保存后,Silverstripe将其更改为小写字符串。我找不到,这种行为是在哪里触发的。有人知道如何防止这种情况吗?它调用的类urlsectionfilterURLSegmentFilter 重要的一点是,generateURLSegment函数实际上调用了Silverstripe的扩展系统,因此,如果您对SiteTree进行数据扩展,您只需指定一个名为updateeurlsegment的函数,并在

我的Silverstripe CMS中有一个URLSEMENT字段,我想在那里有一个大写的链接。但保存后,Silverstripe将其更改为小写字符串。我找不到,这种行为是在哪里触发的。有人知道如何防止这种情况吗?

它调用的类
urlsectionfilter
<在
SiteTreeURLSegmentField
via中调用code>URLSegmentFilter

重要的一点是,
generateURLSegment
函数实际上调用了Silverstripe的扩展系统,因此,如果您对
SiteTree
进行数据扩展,您只需指定一个名为
updateeurlsegment
的函数,并在Silverstripe的基础上进行自己的处理

从我上面链接的代码中,传递到
updateURLSegement
函数的第一个参数是URL的过滤(小写)版本,第二个参数是未触及的值

在执行此操作时,我会小心确保重新实现所有其他过滤代码,如
urlsectfilter
所做的(减去小写调用),否则可能会使用无效字符破坏系统

顺便说一句,我会对实际做这种改变保持警惕。在URL中使用不同的大小写对任何人都没有帮助,一些用户会认为URL是区分大小写的,对于某些系统来说,这很容易做到。不过,我不知道Silverstripe是否会遇到这个问题,我在参与或帮助他人的各种项目中都没有遇到过这个问题


还有一件更快捷的事情,就是有另一种方法可以使用Silverstripe实现类似的更改,并完全覆盖
URLSecgmentFilter
,尽管这只是最后的手段。

您确定知道URL中大写字母的含义吗?感谢您快速且内容丰富的回答。我尝试了扩展
SiteTree
的解决方案,但没有帮助,因为
urlsectfilter
filter
函数(带有
mb_strtolower
函数)也在
SiteTree
onbeforewite()
中调用,因此,在CMS中编辑URLSEMENT字段时,没有触发my
updateURLSegment
函数。这就是为什么我必须在我的新类中使用
Object::useCustomClass
并使用重写的
filter
函数扩展
urlsectfilter
。啊,好的,很高兴你能让它工作。了解在
onbeforewite
中调用它也是很有用的,我自己没听说过:)