Magento 2.2 – Load Static Block in Controller

magento2.2static-block

I tried the following solution:-

Magento 2 Load – Block (CMS Static Block in Magento 1 terms)

But getting some issue, you can visit here to see:-

http://nimb.ws/oURqfV

Here is my controller code:-

<?php

    namespace Test\Clientform\Controller\Show;


    class Index extends \Magento\Framework\App\Action\Action
    {
        protected $_filterProvider;
        protected $_storeManager;
        protected $_blockFactory;

        public function __construct(
            \Magento\Framework\View\Element\Context $context,
            \Magento\Cms\Model\Template\FilterProvider $filterProvider,
            \Magento\Store\Model\StoreManagerInterface $storeManager,
            \Magento\Cms\Model\BlockFactory $blockFactory,
            array $data = []
        )
        {
            parent::__construct($context, $data);
            $this->_filterProvider = $filterProvider;
            $this->_storeManager = $storeManager;
            $this->_blockFactory = $blockFactory;
        }

        public function execute()
        {

            $resultPage = $this->_resultPageFactory->create();
            return $resultPage;
        }

        protected function content()
        {
            $blockId = 'YOurBlock_Id';
            $html = '';
            if ($blockId) {
                $storeId = $this->_storeManager->getStore()->getId();
                /** @var \Magento\Cms\Model\Block $block */
                $block = $this->_blockFactory->create();
                $block->setStoreId($storeId)->load($blockId);

                    $html = $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent());
            }
            return   $html;
        }

    }

    ?>

Best Answer

As you see in your exception log, issue is you should use App\Action\Context instead of View\Element\Context Class

<?php

namespace Test\Clientform\Controller\Show;


class Index extends \Magento\Framework\App\Action\Action
{
    protected $_filterProvider;
    protected $_storeManager;
    protected $_blockFactory;

    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Cms\Model\Template\FilterProvider $filterProvider,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Cms\Model\BlockFactory $blockFactory,
        array $data = []
    )
    {
        parent::__construct($context, $data);
        $this->_filterProvider = $filterProvider;
        $this->_storeManager = $storeManager;
        $this->_blockFactory = $blockFactory;
    }

    public function execute()
    {

        $resultPage = $this->_resultPageFactory->create();
        return $resultPage;
    }

    protected function content()
    {
        $blockId = 'YOurBlock_Id';
        $html = '';
        if ($blockId) {
            $storeId = $this->_storeManager->getStore()->getId();
            /** @var \Magento\Cms\Model\Block $block */
            $block = $this->_blockFactory->create();
            $block->setStoreId($storeId)->load($blockId);

                $html = $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent());
        }
        return   $html;
    }

}

?>

Try this hope it will help.

Related Topic