2017-10-20 110 views
1

我已经创建了一个包,将业务逻辑分离为更容易分发模块。作曲家文件看起来像这样:如何让我的作曲家软件包自动加载正确?

{ 
    "name": "aggiq/johnny-cash", 
    "description": "A collection of controllers, models, migrations, and tests for a phonebanking backend.", 
    "license": "MIT", 
    "authors": [ ... ], 
    "require": { 
     "illuminate/database": ">=5.5" 
    }, 
    "require-dev": { 
     "fzaninotto/faker": "~1.4" 
    }, 
    "autoload": { 
     "psr-4": { 
      "Johnny\\Phonebanking\\": "src/" 
     } 
    } 
} 

和我们的源文件确实是在SRC /:

的src /控制器/ PhonebankController.php 的src /型号/ Phonebank.php ...

我救推这对我们的gitlab回购,然后包括它作为一个测试项目的依赖:

{ 
    ..., 
    "repositories": [{ 
     "type": "package", 
     "package": { 
      "name": "aggiq/johnny-cash", 
      "version": "0.1", 
      "type": "package", 
      "source": { 
       "url": "gitlab url", 
       "type": "git", 
       "reference": "dev" 
      } 
     } 
    }], 
    "require": { 
     "aggiq/johnny-cash": "*", 
    }, 
    ... 
} 

当我做撰写[R更新,它成功地抓住项目并将其下载到供应商的文件夹:

vendor/aggiq/johnny-cash/Controllers/PhonebankController.php 
... 

然而,当我看在测试项目的autoload_psr4.php,它不存在。我错过了一个步骤吗?

编辑:更新的目录有大写字母相匹配的命名空间,这里是生成的PSR4 php文件:

<?php 

// autoload_psr4.php @generated by Composer 

$vendorDir = dirname(dirname(__FILE__)); 
$baseDir = dirname($vendorDir); 

return array(
); 

回答

0

我已经解决了它。我们需要做两件事。

  1. 父pacakge指定储存库的类型应该是vcspackage,因为我们正在从一个混帐服务器加载:

    “库”:[{ “类型”: “风险投资”, “ url“:”git @ xxx。Git的” }]

  2. 子包的封装类型应该是library

    “类型”: “

一旦这两个的变化进行了改造,安装了不作曲家更新库”只有子包,而且它的依赖,证明它是由作曲家的认可。

0

您已经注册了自动加载在你的包的composer.json正确:

"autoload": { 
    "psr-4": { 
     "Johnny\\Phonebanking\\": "src/" 
    } 
} 

这意味着,Johnny\Phonebanking名称空间中的任何类将位于src目录中。例如: -

  • Johnny\Phonebanking\SomeClass =>src/SomeClass.php
  • Johnny\Phonebanking\SomeNamespace\AnotherClass =>src/SomeNamespace\AnotherClass.php

正如你所看到的,它必须尊重CapitalLetters


说,你应该纠正你的目录的第一个字母,由:

src/controllers/PhonebankController.php 
src/models/Phonebank.php 

src/Controllers/PhonebankController.php 
src/Models/Phonebank.php 
+0

我已经改名为目录'的src/Controllers','的src/Models',等如你所说,并重新导入项目到我的基地项目,我可以c确认'vendor /'文件夹中的目录。但是运行'composer update'和'composer dump-autoload'不会将这些类添加到psr4 autoload文件中。抱歉! – whiterook6

+0

只有前缀和它们的位置shoudl在'autoload_psr4.php',而不是特定的文件。如果缺少Johnny \\ Phonebanking \\“',请将文件的内容添加到您的问题中。 –

+0

编辑成包括PSR4文件的内容 – whiterook6

相关问题