2014-02-12 45 views
1

这应该是一个容易的。我开发了一个包把它的Myvendor \ MyPackage的作曲家包没有出现在autoload_namespaces

MyVendor\MyPackage是:

  • 的Myvendor \ MyPackage的\ composer.json
  • 的Myvendor \ MyPackage的\ MyClass.php

MyVendor\MyPackage\composer.json文件包含:

{ 
    "name":"MyVendor/MyPackage", 
    "description":"MyClass!!!", 
    "keywords": ["MyKeyword"], 
    "homepage": "http://MyPackage.com", 
    "type":"library", 
    "license": "MIT", 
    "authors": [ 
     { 
      "name": "ME", 
      "email": "[email protected]", 
      "homepage":"http://ME.com" 
     } 
    ], 
    "require": { 

    }, 
    "autoload":{ 
     "psr-4" : { 
      "MyVendor\\MyPackage\\":"" 
     } 
    } 
} 

现在我还有其他R项目称为MyOtherPackagecomposer.json文件看起来像:

{ 
"require": { 
    "monolog/monolog": "1.2.*", 
    "MyVendor/MyPackage": "1.0.0" 
}, 
"autoload": { 
    "psr-4": { 
     "MyVendor\\MyOtherPackage\\": "MyOtherPackage/", 
     "MyVendor\\": "/" 
    } 
}, 
"repositories": [ 
    { 
     "type": "package", 
     "package": { 
      "name": "MyVendor/MyPackage", 
      "version": "1.0.0", 
      "source": { 
       "url": "https://ME.com/svn/MyVendor/MyPackage/", 
       "type": "svn", 
       "reference": "trunk" 
      } 
     } 
    } 
] 
} 

所以MyOtherPackage取决于MyPackage的。一切下载都很好,但如果我打开autload_namespaces.php它只包含monolog。它看起来像这样:

return array(
    'Monolog' => array($vendorDir . '/monolog/monolog/src'), 
); 

为什么不MyVendor/MyPackage出现在namespaces.phpautoload_psr4.php文件? composer.json文件是否错误?

编辑我添加到MyPackage composer.json文件中。

回答

1

我已经想通了。看起来好像将存储库定义为一个包,我告诉作曲家它不是作曲家兼容的类,这意味着作曲家不会查找composer.json文件。

要解决它,我删除的包定义并提出了相关的类的composer.json文件看起来像:

{ 
    "require": { 
     "monolog/monolog": "1.2.*", 
     "MyVendor/MyPackage": "1.0.0" 
    }, 
    "autoload": { 
     "psr-4": { 
      "MyVendor\\MyOtherPackage\\": "MyOtherPackage/", 
      "MyVendor\\": "/" 
     } 
    }, 
    "repositories": [ 
     { 
      "type": "svn", 
      "url": "https://ME.com/svn/MyVendor/MyPackage/", 
      "reference": "tags" 
     } 
    ] 
} 

这告诉作曲家从该库下载该包,并寻找composer.json文件。

0

您没有在第一个包中定义任何自动加载机制。如果你不这样做,Composer无法知道如何自动加载这些类,并且什么都不做(如果你的软件包根本不包含任何PHP,这是一个有效的选项,但是例如只有图像和JavaScript)。

添加这样的事情:

"autoload": { 
    "psr-0": { 
     "MyVendor\\Namespace":"src/path" 
    } 
} 
+0

我接着说: “自动加载”:{ \t \t “PSR-4”:{ \t \t \t “的Myvendor \\ \\ MyPackage的”: “” \t \t} \t}'和封装工程时,我运行作曲家安装,但是当我将它作为依赖项包含它时,它仍然没有显示在名称空间文件中。感谢您的帮助! – ajon

+0

PSR-4 autoloading不包含在'autoload_namespaces.php'中,而是包含在'autoload_psr4.php'中。 – Sven

+0

'autoload_psr4.php'文件同样没有映射文件。它具有来自MyOtherPackage的自动加载定义,但不是来自MyPackage。底线是当我尝试访问我得到的网页:'Class'MyVendor \ MyPackage \ MyClass'not found in ...' – ajon