我的SilverStripe模块覆盖其他模块显示

时间:2016-09-13 05:29:30

标签: php templates silverstripe

我正在编写订阅模块以插入SilverStripe Blog模块。到目前为止,我的yml为:

---
Name: subscription
After: 'framework/*','cms/*'
---
Blog:
  extensions:
    - Subscription
Page_Controller:
  extensions:
    - SubscriptionWidget

我的SubscriptionWidget.php:

<?php
class SubscriptionWidget extends DataExtension {

    public function SubscriptionWidget() {
        $controller = SubscriptionWidget_Controller::create();
        $form = $controller->SubscriptionWidget();
        return $form;
    }
}

class SubscriptionWidget_Controller extends Controller {
    private static $allowed_actions = array('SubscriptionWidget');

    public function SubscriptionWidget () {
        $form = Form::create(
            $this,
            __FUNCTION__,
            FieldList::create(
                TextField::create('Email', 'Email'),
                TextField::create('Name', 'Name')
            ),
            FieldList::create(
                FormAction::create('submit', 'Subscribe')
            )
        );//->setTemplate('SubscriptionWidget');
        return $form;
    }

    public function submit($data, $form) {
        return $this->redirect('/subscribed');
    }

}

目前这是按预期工作的,但我使用的另一个名为BetterNavigator的插件会从屏幕上消失。如果我拿出

Page_Controller:
  extensions:
  - SubscriptionWidget
从我的yml

再次出现。我查看了两个代码库,这些代码库非常简单,并且没有相互冲突的功能。我还尝试使用ContentController代替Page_Controller,我的模板消失,直到我禁用BetterNavigator,然后重新出现。我确实有一两个相当空的类,但所有都被称为Subscriber的一些变体,而BetterNavigator中只有一个名为BetterNavigator的函数。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我发现代码中只有一个冲突导致运行时行为不正确。您的方法SubscriptionWidget::SubscriptionWidget()被视为遗留类构造函数。所以我建议你考虑更好的类和方法名称。

class SubscriptionWidget extends Extension
{
    // explicitly defined constructor
    public function __construct() {
        parent::__construct();
    }

    // now this one is normal function
    public function SubscriptionWidget() {
        $controller = SubscriptionWidget_Controller::create();
        $form = $controller->SubscriptionWidget();
        return $form;
    }
}
相关问题