在我的自定义代码上使用命名空间后,使用SilverStripe时遇到很多问题。主要问题是SilverStripe用于存储命名空间类的命名约定:
名为Product
且名称空间为MyStore
的DataObject会创建一个名为Product\MyStore
的表。斜杠在命名约定中是一个相当愚蠢的选择,因为它是MySQL中的转义序列。
现在的问题是我试图从CLI手动删除表中的过时字段,并且无法手动编写转义这样的表名的查询。
describe Product\MyStore
describe "Product\MyStore"
describe 'Product\MyStore'
describe "Product\\MyStore"
describe 'Product\\MyStore'
describe Product\\MyStore
然而这很好:
describe SiteTree
我必须问一下,SilverStripe推荐的名称空间是由于这个吗?我非常接近将所有的名称空间都拆掉,因为它在3.5中的处理方式非常适得其反。
更新:对于将来的搜索,要在CLI中解决此问题,您必须将表名包装在反引号中。
describe `Product\MyStore`
虽然它们的使用(或导致它们被使用的原因 - 例如名称不佳的表格)似乎arguable in the MySQL community。我将保留这个问题,因为它在命名约定方面可能仍然有效。
答案 0 :(得分:2)
简答:不(编辑:是的? - 见下文)
虽然有可能,但我强烈建议您不要在SilverStripe 3中使用名称空间,而是等待SilverStripe 4。 我自己曾试图在SilverStripe 3.2的几个项目上使用命名空间,并且在各方面都遇到了大量麻烦,我最终还是把它全部用到了工作中,但是它不值得努力。 因此,我恢复了非命名空间的设置。
但是有一个好消息,SilverStripe 4现在处于alpha状态,我很好的感觉我们实际上会很快看到一个版本(几个月)。 我实际上已经有2个项目在开发中使用SilverStripe 4,其中一个项目将在几个星期内上线。 因此,如果您的项目要么长时间处于开发阶段,要么您只是愿意承担风险,那么您可能需要考虑使用SilverStripe 4。
编辑:其他人指出他们比我更成功。尤其是> = 3.5。因此,我必须假设在尝试使用命名空间后,与命名空间的兼容性得到了改进。