繁体   English   中英

扩展模块但保留不可覆盖模板 map

[英]Extending module but keep no-overwrite template map

我一直在寻找如何在其他项目中重用我的用户模块。 由于我为每个客户都有自定义功能,因此我决定创建:

  1. 一个要打包的通用UserModule
  2. 一个名为UserCustom的扩展模块

UserModule 有以下视图:登录和添加(用于注册)。 UserCustom 正在扩展 Module.php ,仅此而已。

<?php
namespace UserCustom;

use Laminas\Mvc\MvcEvent;
use Users\Module as UserModule;

class Module extends UserModule
{

    public function getConfig()
    {
        return include __DIR__ . '/../config/module.config.php';
    }

现在,假设我只想更改登录视图以添加徽标。

我不明白如何覆盖特定的视图文件并保留其他文件。 使用我当前的配置,我必须覆盖 UserModule 拥有的每个视图(覆盖到新文件位置甚至供应商)。

我已经声明了以下代码来登录新的视图文件:UserCustom module.config.php:

'view_manager' => [
    'template_map' => [
        'user/login' => __DIR__ . '/../view/user-custom/new_login.phtml',

但是,当我 go 到 /add 页面时,似乎我需要声明每个视图。 Laminas\View\Renderer\PhpRenderer::render:无法渲染模板“用户/添加”; 解析器无法解析到文件

我的 UserModule 有一个

'template_path_stack' => [
 'user' => __DIR__ . '/../view',
],

但我不知道它是否对我有帮助。

谢谢

要覆盖任何操作视图文件,您必须了解 Laminas 如何搜索视图文件的基本功能。 要理解这一点,您可以查看配置here ,我将在下面解释。

return [
  'template_stack' => [  
       // template stack means where will all the view files of every controller and its action will be found.
  ],
  'template_map' => [
     // the default map would be as follows
     // 'ModuleName/ControllerName/ActionName' => 'actual path of file.' 
    'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
  ],
];

要覆盖您在 module.config.php 文件中定义的操作模板文件,如下所示。

return [
  'template_map' => [
    'application/index/index' => __DIR__ . '/../view/mymodulename/mycontrollername/myactionname.phtml',
  ];

我希望我已经回答了你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM