PS 1.7中我的后台未显示渲染视图

问题描述

我正在尝试在模块安装中创建的后台标签中创建视图。我的模块添加标签如下:

protected function _installTabs()
{
    if(!$tabId = \Tab::getIdFromClassName('IezonPortfolio')) {
        $tab = new \Tab();
        $tab->class_name = 'IezonPortfolio';
        $tab->module = $this->name;
        $tab->id_parent = \Tab::getIdFromClassName('ShopParameters');
        $tab->active = 1;
        
        foreach (Language::getLanguages(false) as $lang):               
           $tab->name[(int) $lang['id_lang']] = 'My Portfolio';
        endforeach;
        
        return $tab->save();
    }
    
   new \Tab((int) $tabId);
   return true;
}

这很好用,我可以导航至我的商店参数,然后单击我的投资组合标签。我遇到的问题是空白。我的ModuleAdminController看起来像这样:

class IezonPortfolioController extends ModuleAdminController {
    private $_module;
    
    public function __construct()
    {
        $this->bootstrap = true;
        parent::__construct();
        $this->_module = \Module::getInstanceByName('iezonportfolio');
    }
    
    public function indexAction()
    {
        return $this->render('@Modules/iezonportfolio/views/templates/admin/display.html.twig',array(
            'contents_iezonportfolio' => $this->_module->selectAll()
        ));
    }
}

我的display.html.twig中仅包含test,以查看是否会输出输出内容On looking at the Docs除了使用render函数并将其返回外,没有提及任何其他内容。任何帮助,将不胜感激。我只是得到一个空白标签

编辑:在查看了一些预安装的模块并将它们引用到Docs之后,我发现我缺少了路由配置。我的控制器位于记录的目录设置:iezonportfolio/controllers/admin/iezonportfolio.PHP中,因此我的路由如下:

iezonportfolio:
  path: iezonportfolio
  methods: [GET]
  defaults:
    _controller: 'IezonPortfolio\Controllers\Admin\Controller::indexAction'
    _legacy_controller: 'IezonPortfolioController'
    _legacy_link: 'IezonPortfolioController:index'

这仍不能解决空白显示问题,因此我尝试更深入地研究其他模块,并更新了display.html.twig以显示此信息:

{% extends '@PrestaShop/Admin/layout.html.twig' %}

{% block content %}
  Test
{% endblock %}

这也不能解决空白显示问题。我希望此功能对将来的观众有用。

解决方法

这不是现代控制器的工作方式,您正在扩展旧式ModuleAdminController,请在此处查看:

https://github.com/PrestaShop/example-modules

您有很多模块示例,下面是其中一个模块的片段:

declare(strict_types=1);

namespace PrestaShop\Module\DemoControllerTabs\Controller\Admin;

use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
use Symfony\Component\HttpFoundation\Response;

class MinimalistController extends FrameworkBundleAdminController
{
    /**
     * @return Response
     */
    public function indexAction()
    {
        return $this->render('@Modules/democontrollertabs/views/templates/admin/minimalist.html.twig');
    }
}

我建议您考虑是否要使用或不使用现代控制器。这取决于您是否要出售模块,在客户项目中使用模块等。