我想做一个过滤器,用渲染的组件替换一些文本。由于组件需要控制器来呈现自身,并且插件类无法访问它,因此我不知道如何正确实现。
// ...
// Within my plugin
public function registerMarkupTags()
{
return [
'filters' => [
'myfilter' => function($content){
$render = RenderMyComponentPlease('my-component') // <- Rendering the component
return str_replace('[SLUG]', $render, $content); // Replace within the text
}
]
];
}
// ...
答案 0 :(得分:0)
知道了!
我没有注意到控制器是Singleton,可以使用静态方法getController()来检索控制器。
这是一个可能的解决方案:
// ...
// Within my plugin
public function registerMarkupTags()
{
return [
'filters' => [
'myfilter' => function($content){
$controller = Controller::getController(); // Retrieve the controller
$controller->addComponent('MyPluginPath\Components\MyComponent', 'my-component', [], false); // Add my component to the page
$render = $controller->renderComponent('my-component', []); // <- Rendering the component
return str_replace('[SLUG]', $render, $content); // Replace within the text
}
]
];
}
// ...