SS4.4
我有两个类Member和Activity。成员有很多活动。我有一个类MemberExtension,它扩展了Member。在MemberExtension内部,我们有一个has_many数组,其中包含“活动”。我们如何在MemberExtension中获得活动列表?
我们尝试了以下操作:
$ this-> Activities()
错误:未捕获的错误:调用未定义的方法MemberExtension :: Activities()
$ this-> getOwner()-> Activity()
错误:未捕获的BadMethodCallException:对象-> __ call():'SilverStripe \ Security \ Member'上不存在方法'Activities'
我们还运行过dev / build?flush
// MemberExtension class
class MemberExtension extends DataExtension {
public static $has_many = [
'Activities' => Activity::class
];
}
// Activity class
class Activity extends DataObject {
private static $has_one = [
'Member' => Member::class,
];
}
// Register MemberExtension in _config.php
Member::add_extension(MemberExtension::class);
在MemberExtension $this->owner->Activities()
中应该起作用。
[在Silverstripe CMS 4中,您还需要使用FQCN(完全限定的类名,也包括整个名称空间。这意味着添加扩展名时需要使用SilverStripe\Security\Member
。这也是将yml配置文件用于为类添加扩展,请参见documentation。
SilverStripe\Security\Member:
extensions:
- MemberExtension
假设您的扩展程序还没有名称空间。
然后,在运行dev / build / flush之后,您应该能够调用Activity关系,如上所示:
$activities = $this->owner->Activities(); //name of the relation as always