我在我的Silverstripe CMS中有一个URLSegment字段,并且我希望有一个大写的链接。但是在保存之后,Silverstripe会将其更改为小写字符串。我找不到,这种行为被触发。有谁知道,如何预防?如何防止Silverstripe将URLSegment字段值更改为小写?
回答
该类别URLSegmentFilter
is responsible for the lower case conversion of the URLSegment,它叫mb_strtotlower
。 URLSegmentFilter
通过Sitetree
's generateURLSegment
function在SiteTreeURLSegmentField
中调用。
从这个就是generateURLSegment
功能实际上调用Silverstripe的扩展系统,所以如果你做的SiteTree
数据扩展,你只需要指定一个名为updateURLSegment
功能和做的顶部自己处理带走重要的部分是什么银条纹。
从上面链接的代码中,传递到updateURLSegement
函数的第一个参数将是URL的过滤(和小写)版本,第二个参数将是未触及的值。
当这样做的时候,我会小心的确保你重新实现所有其他的过滤代码,如URLSegmentFilter
(不包括小写调用),否则它可能会破坏系统中的无效字符。
对此的一个注意事项,我会对实际进行此更改保持警惕。在URL中有不同的情况对任何人都没有帮助,有些用户会认为这些URL是区分大小写的,对于某些系统来说很容易。我不知道Silverstripe是否会有这个问题,但我没有遇到过我曾参与或帮助过的各种项目。
还有一件事很快,还有另一种方法来使用Silverstripe的Object::useCustomClass
function来实现类似的更改,并且完全覆盖URLSegmentFilter
,尽管只是将其用作最后的手段。
感谢您提供快速且非常翔实的答案。我尝试了扩展'SiteTree'的解决方案,但这并没有帮助,因为'URLSegmentFilter'(带有'mb_strtolower'函数)的'filter'函数也在'SiteTree'的'onBeforeWrite()'中调用。 ,所以当编辑CMS中的URLSegment字段时,我的'updateURLSegment'函数没有被触发。这就是为什么我必须使用'Object :: useCustomClass'并在我的新类中使用'filter'功能覆盖'URLSegmentFilter'。 – user3888130
Ahhhh好吧,很高兴你能工作。这对于了解它在'onBeforeWrite'中被调用是有用的,并没有自己选择:) – Turnerj
- 1. 如何将字段值大小写更改为'骆驼'格式?
- 2. HTTPWebRequest,如何防止更改大小写的主机/标头值
- 3. 如何将所有输入字段值更改为大写
- 4. 如何防止更改图像大小?
- 5. 如何将小写数组值更改为大写?
- 6. 如何更改大写改为小写
- 7. 如何防止QDoubleSpinBox更改值
- 8. jQuery animate:我如何防止更改值?
- 9. 防止Wordpress重写大写字母为小写字母
- 10. 如何防止SerializeJSON将是/否/真/假字符串更改为布尔值?
- 11. 如何将整列的大小写更改为小写?
- 12. 如何强制Jackson将字段值反序列化为小写
- 13. 如何防止ActiveRecord对象的字段被更改?
- 14. 如何防止某些字段的RIA服务更改跟踪?
- 15. 防止更改输入值
- 16. 如何防止“格式为百分比”将数字更改为字符串?
- 17. 在ASP.NET中,如何防止篡改隐藏字段值
- 18. 如何防止隐藏字段值的篡改malacious用户
- 19. 防止用户更改为字体
- 20. 如何将空格更改为下划线和小写字母?
- 21. 如何将字符大小写更改为NSAttributedString中的Upper
- 22. 使用ObjectMapper更改字段大小写
- 23. 如何将大写字母更改为小写字母和空格以强调
- 24. 如何动态更改SilverStripe中字段的类型
- 25. 如何将字段更新为空值?
- 26. 防止更改为动画
- 27. 将小写字母更改为:数字00-25,将大写字母更改为:数字26-51
- 28. 如何将数组键从大写更改为小写?
- 29. 如何在Tcl中将小写更改为大写?
- 30. SQL将值更改为大写或小写
确定您知道大写字母在网址中的含义? http://wiredimpact.com/blog/never-use-capital-letters-urls/ – schellmax