如何在Silverstripe中向ModelAdmin添加自定义操作?

时间:2015-01-05 01:48:32

标签: php silverstripe

我有一个名为MembershipAdmin的ModelAdmin扩展名。

class MembershipAdmin extends ModelAdmin {

  private static $url_segment = 'membership';

  private static $url_handlers = array(
      '$ModelClass/$Action' => 'handleAction',
      '$ModelClass/$Action/$ID' => 'handleAction'
)

我希望它识别以下操作,并通过以下网址访问该操作:http://www.example.com/admin/membership/Member/ActivateMember/666 - 只能在CMS中访问。

public function ActivateMember() {

    $Params = $this->getURLParams();
    $id = Convert::raw2sql($Params['ID']);
    $Member = Member::get_by_id('Member', $id);
    //activate member.

但是,当我运行此ID时,ID不会被识别为URL参数。

通过只能在CMS中访问的URL运行ActivateMember的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这里的问题是第一个URL处理程序是匹配的,而不是第二个。这意味着$ID不匹配。

这是因为处理程序不需要匹配整个URL并按顺序检查。要更正此问题,只需在列表中首先使用更具体的处理程序($ID)处理程序。