我正在编写订阅模块以插入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的函数。
为什么会这样?
答案 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;
}
}