在十月 CMS 中重构一个部分
Refactoring a Partial in October CMS
美好的一天,
我有几个部分有代码。在代码选项卡中,我注意到代码选项卡具有相似的代码。以下是示例
部分 1
function onStart()
{
$x = MyModel1::where('myColumn', 'myValue')->first();
// lots of stuff using $x functions
$this['viewData'] = $x->getViewData();
}
部分 2
function onStart()
{
$x = MyModel2::where('myColumn', 'myValue')->first();
// lots of stuff using $x functions
$this['viewData'] = $x->getViewData();
}
MyModel1和MyModel2实现了相同的接口,所以功能相同
我的问题是,我应该把相似的代码放在哪里?我可以把它放在一个插件中,但感觉不正确。我可以创建一个基础 class 并让部分调用父方法,但这是否意味着修改 vendor 文件夹中的代码?
如果您真的需要管理您的代码,您可以创建组件并在其中添加该代码,因为它们很容易附加到其他页面(缺点是您需要创建一个插件)
您可以在 onRun
方法中编写代码。
https://octobercms.com/docs/plugin/components#page-cycle
而不是直接将变量分配给 this
你需要像
那样分配它们
$this->page['var'] = 'value';
现在它将像您一样工作。
美好的一天,
我有几个部分有代码。在代码选项卡中,我注意到代码选项卡具有相似的代码。以下是示例
部分 1
function onStart()
{
$x = MyModel1::where('myColumn', 'myValue')->first();
// lots of stuff using $x functions
$this['viewData'] = $x->getViewData();
}
部分 2
function onStart()
{
$x = MyModel2::where('myColumn', 'myValue')->first();
// lots of stuff using $x functions
$this['viewData'] = $x->getViewData();
}
MyModel1和MyModel2实现了相同的接口,所以功能相同
我的问题是,我应该把相似的代码放在哪里?我可以把它放在一个插件中,但感觉不正确。我可以创建一个基础 class 并让部分调用父方法,但这是否意味着修改 vendor 文件夹中的代码?
如果您真的需要管理您的代码,您可以创建组件并在其中添加该代码,因为它们很容易附加到其他页面(缺点是您需要创建一个插件)
您可以在 onRun
方法中编写代码。
https://octobercms.com/docs/plugin/components#page-cycle
而不是直接将变量分配给 this
你需要像
$this->page['var'] = 'value';
现在它将像您一样工作。