【问题标题】:How to add custom action to ModelAdmin in Silverstripe?如何在 Silverstripe 中向 ModelAdmin 添加自定义操作?
【发布时间】:2015-01-05 01:48:31
【问题描述】:

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

class MembershipAdmin extends ModelAdmin {

  private static $url_segment = 'membership';

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

我希望它能够识别以下操作并通过如下 URL 访问该操作: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 时,它不会被识别为 URL 参数。

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

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

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

    这是因为处理程序不需要匹配整个 URL 而是按顺序检查。要更正此问题,只需将更具体的处理程序(带有$ID 的处理程序)放在列表​​的第一位。

    【讨论】:

    • 太好了 - 谢谢。我确定我从现有的经过验证的模块中复制了该订单,所以不确定那里发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    相关资源
    最近更新 更多