SilverStripe:更新文件以使用命名空间后获取 "you need to change the ClassName before you can write it"
SilverStripe: Getting "you need to change the ClassName before you can write it" after update files to use namespaces
我在尝试 ->write() 一个名为 'ModelSheet' 的 DataObject 时遇到了这个异常,它说名称应该是 Models\ModelSheet 而不是仅 ModelSheet(我在同一个命名空间下(模型)甚至尝试使用 use 语句)
嗨 Guilherme,欢迎来到 Whosebug,
保存到您的数据库记录中的类名似乎与您的 PHP 类名不匹配。
当更改类名时(添加或更改命名空间就是更改类名),您需要更新数据库以反映此更改,因为类名保存在数据库中,因此 Silverstripe 知道 PHP-Object 是哪个与数据记录相关。
如果您使用 Silverstripe's upgrader tool, you should have an .upgrade.yml
in your module's directory (e.g. in app or mysite). If not, you can add it manually (see e.g. https://github.com/wernerkrauss/silverstripe-onepage/blob/master/.upgrade.yml 作为随机示例)。结构就像
mappings:
OldClassName: My\Namespace\NewClassname
在那之后,您只需要 运行 dev/build/?flush
就可以更新您的数据库了。
我在尝试 ->write() 一个名为 'ModelSheet' 的 DataObject 时遇到了这个异常,它说名称应该是 Models\ModelSheet 而不是仅 ModelSheet(我在同一个命名空间下(模型)甚至尝试使用 use 语句)
嗨 Guilherme,欢迎来到 Whosebug,
保存到您的数据库记录中的类名似乎与您的 PHP 类名不匹配。
当更改类名时(添加或更改命名空间就是更改类名),您需要更新数据库以反映此更改,因为类名保存在数据库中,因此 Silverstripe 知道 PHP-Object 是哪个与数据记录相关。
如果您使用 Silverstripe's upgrader tool, you should have an .upgrade.yml
in your module's directory (e.g. in app or mysite). If not, you can add it manually (see e.g. https://github.com/wernerkrauss/silverstripe-onepage/blob/master/.upgrade.yml 作为随机示例)。结构就像
mappings:
OldClassName: My\Namespace\NewClassname
在那之后,您只需要 运行 dev/build/?flush
就可以更新您的数据库了。