【问题标题】:PSR4 Sub-directory don't match the case of the sub-namespace namesPSR4 子目录与子命名空间名称的大小写不匹配
【发布时间】:2019-10-05 14:46:37
【问题描述】:

根据psr4子目录必须匹配子命名空间名称的大小写

“命名空间前缀”之后的连续子命名空间名称对应于“基本目录”中的一个子目录,其中命名空间分隔符代表目录分隔符。子目录名称必须与子命名空间名称的大小写匹配。

但是当我查看 Magento 2 的供应商目录时,我看到了不同的模块,其子目录名称与子命名空间名称不匹配。 例如:Magento 2 模块“vendor/magento/module-new-relic-reporting”使用命名空间“Magento\NewRelicReporting

但是当我尝试按照 Magento 2 方法开发模块时,我失败了

  1. 创建一个名为“aneeqtariq143”的供应商文件夹
  2. 创建模块名称“ma​​gento2-product-newsletter
  3. 使用内容创建一个 composer.json 文件
        {
        "name": "aneeqtariq143/magento2-module-magento2-product-newsletter",
        "require": {
            "php": "~7.0.0"
        },
        "type": "magento2-module",
        "autoload": {
           "files": [
             "registration.php"
            ],
         "psr-4": {
             "Aneeqtariq143\\Magento2ProductNewsletter\\": ""
           }
         }
        }
  1. 使用命名空间创建控制器
namespace Aneeqtariq143\Magento2ProductNewsletter\Controller\Adminhtml\Product;
  • 它不起作用。
    • Magento 找不到我的控制器。
  • 另外,请指出模块目录命名约定和命名空间的最佳做法。

【问题讨论】:

标签: php module namespaces magento2 psr-4


【解决方案1】:

根据我对 Magento 如何处理此问题的理解。假设您没有由 etc/frontendetc/adminhtml 中的 routes.xml 文件引起的问题。您在 composer.json 文件中给出的名称 aneeqtariq143/magento2-module-magento2-product-newsletter 表示您的命名空间应该是 Aneeqtariq143\\Magento2ModuleMagento2ProductNewsletter\\。 Magento 似乎希望您使用 module-<modulename> 而不是 magento2-module-<modulename>

值得检查您的定位控制器的网址是否符合(在您的情况下)<frontname(./etc/adminhtml/routes.xml)>/Adminhtml/Product

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多