如何从树枝过滤器渲染组件?

时间:2019-04-29 15:22:30

标签: octobercms

我想做一个过滤器,用渲染的组件替换一些文本。由于组件需要控制器来呈现自身,并且插件类无法访问它,因此我不知道如何正确实现。

// ...

// 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
            }
        ]
    ];
}

// ...

1 个答案:

答案 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
            }
        ]
    ];
}

// ...