2017-10-20 106 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

相關問題