首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括碳场通过作曲家与莫扎特

包括碳场通过作曲家与莫扎特
EN

WordPress Development用户
提问于 2021-04-18 00:26:15
回答 1查看 174关注 0票数 0

Coen的莫扎特是一个防止Wordpress主题/插件中的名称空间冲突的工具,它利用Composer进行依赖管理。它类似于PHP作用域,但被描述为更简单和面向Wordpress。

我的莫扎特配置如下:

代码语言:javascript
复制
  "extra": {
       "mozart": {
           "dep_namespace": "MZoo\\MyPlugin\\Dependencies\\",
           "dep_directory": "/src/Dependencies/",
           "classmap_directory": "/src/Classes/",
           "classmap_prefix": "MYPREFIX_",
           "packages": [
               "htmlburger/carbon-fields"
           ],
           "delete_vendor_directories": true
       }
   },

所有的碳字段文件都是名称空间前缀,并迁移到src/Dependencies/Carbon_Fields,除了vendor/htmlburger/carbon-fields/config.php文件,该文件驻留在core目录之上,其中包含所有插件类。

我尝试在脚本标记中复制该文件:

代码语言:javascript
复制
"post-update-cmd": [
      "cp vendor/htmlburger/carbon-fields/config.php src/Dependencies/Carbon_Fields/",

然后以psr-4作为file将其添加到autoload中:

代码语言:javascript
复制
"files": ["src/Dependencies/Carbon_Fields/config.php"]

这让莫扎特发疯了:

代码语言:javascript
复制
Call to undefined function trailingslashit() in .../vendor/htmlburger/carbon-fields/core/Carbon_Fields.php:229

我认为解决方案可能是凌驾于碳场的作曲自动写成:

代码语言:javascript
复制
    "autoload": {
        "psr-4": {
            "Carbon_Fields\\": "core/"
        }
    },

通过Mozart的override_autoload配置选项,即“用包名键键的字典,自动加载设置以替换原始包的composer.json autoload属性中的设置”。

所以这就是我大脑减压后要做的事情。

如果有人想插话,请提前谢谢。

更新

还是看不出是对的。

代码语言:javascript
复制
"extra": {
      "mozart": {
          "dep_namespace": "MZoo\\MzMboAccess\\Dependencies\\",
          "dep_directory": "/src/Dependencies/",
          "classmap_directory": "/src/Classes/",
          "classmap_prefix": "MZMBOACCESS_",
          "packages": [
              "htmlburger/carbon-fields"
          ],
          "delete_vendor_directories": false,
          "override_autoload": {
              "htmlburger/carbon-fields": {
                "psr-4": {
                  "Carbon_Fields\\": "core/"
                },
                "files": ["./config.php"]
              }
          }
      }
  },

上面的override_autoload配置似乎对config.php文件没有任何作用。

我觉得我最后要做的是:

代码语言:javascript
复制
src/Dependencies/Carbon_Fields
|__config.php
|__core/
|____All of the CF class files.

我的结局是:

代码语言:javascript
复制
src/Dependencies/Carbon_Fields
|__All of the CF class files.

尝试引用override_autoload中的整个目录如下:

代码语言:javascript
复制
"Carbon_Fields\\": "./"

这样做的是复制所需的目录结构,但违反了psr-4自动加载标准。

EN

回答 1

WordPress Development用户

发布于 2021-04-19 19:48:05

因此,Mozart还不支持字段自动加载,但其中有一个分支(可能会在某个时候合并到Mozart master中)。

下面是我能够管理碳字段的作曲家文件(还有Eric的Sessionz和WP会话管理器):

代码语言:javascript
复制
    "type": "wordpress-plugin",
    "scripts": {
        "lint": [
          "phpcs --extensions=php src *.php"
        ],
    "fix": ["phpcbf --extensions=php src *.php"],
    "post-install-cmd": [
        "\"vendor/bin/mozart\" compose"
    ],
    "post-update-cmd": [
      "\"vendor/bin/mozart\" compose"
    ]
    },
  "require": {
        "php": ">=7.1",
        "ericmann/sessionz": "^0.3",
        "ericmann/wp-session-manager": "*",
    "htmlburger/carbon-fields": "*"
  },
  "repositories": [
    {
      "url": "https://github.com/brianhenryie/mozart",
      "type": "git"
    },
    {
      "url": "https://github.com/ericmann/wp-session-manager",
      "type": "git"
    }
  ],
  "require-dev":{
    "coenjacobs/mozart": "dev-rewrite",
        "squizlabs/php_codesniffer": "*",
        "wp-coding-standards/wpcs": "*"
  },
    "autoload": {
        "psr-4": {
            "MZoo\\MzMboAccess\\": "src"
        }
    },
  "extra": {
    "mozart":{
      "dep_namespace": "MZoo\\MzMboAccess\\Dependencies\\",
      "dep_directory": "/src/Mozart/",
      "packages": [
        "htmlburger/carbon-fields",
        "ericmann/wp-session-manager",
        "ericmann/sessionz"
      ],
      "delete_vendor_directories": false,
      "override_autoload": {
        "htmlburger/carbon-fields": {
          "psr-4": {
            "Carbon_Fields\\": "core/"
          },
          "files": [
            "config.php",
            "templates",
            "assets",
            "build"
          ]
        }
      }
    }
  }

除了作曲家自编,我还需要莫扎特特有的自编:

代码语言:javascript
复制
/**
 * Autoload Classes
 */
$wp_mbo_access_autoload = NS\PLUGIN_NAME_DIR . '/vendor/autoload.php';
if ( file_exists( $wp_mbo_access_autoload ) ) {
    include_once $wp_mbo_access_autoload;
}

// Mozart-managed dependencies
$wp_mbo_access_mozart_autoload = NS\PLUGIN_NAME_DIR . '/src/Mozart/autoload.php';
if ( file_exists( $wp_mbo_access_mozart_autoload ) ) {
    include_once $wp_mbo_access_mozart_autoload;
}
票数 1
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/386805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档