PSR4 子目录与子命名空间名称的大小写不匹配



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

"命名空间

前缀"后面的连续子命名空间名称对应于"基目录"中的子目录,其中命名空间分隔符表示目录分隔符。子目录名称必须与子命名空间名称的大小写匹配。

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

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

  1. 创建名为">aneeqtariq143"的供应商文件夹
  2. 创建模块名称">洋红色2-产品-新闻稿">
  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 Aneeqtariq143Magento2ProductNewsletterControllerAdminhtmlProduct;
  • 它没有用。
    • Magento找不到我的控制器。
  • 另外,请向我指出模块目录命名约定和命名空间的最佳实践。

从我如何理解Magento如何处理这个问题。假设您没有由路由引起的问题.xmletc/frontendetc/adminhtml中的文件。您在 composer.json 文件中给出的名称aneeqtariq143/magento2-module-magento2-product-newsletter会说您的命名空间应该Aneeqtariq143\Magento2ModuleMagento2ProductNewsletter\.Magento似乎希望您使用module-<modulename>而不是magento2-module-<modulename>

无论如何,值得检查您的针对控制器的 url 是否符合(在您的情况下(<frontname(./etc/adminhtml/routes.xml)>/Adminhtml/Product

最新更新