2017-07-10 49 views
2

私はSlim3 APIを書いていますが、何らかの理由でスリムがコンポーザーで定義されている名前空間をロードしていません。Slim3 PSR-4オートローダー

ここにプロジェクトの構造があります。

FolderStruc:

projectApi 

- composer.json 
- src 
    - public 
     - index.php 
    - ProjectName 
     - Api 
     - Controllers 
     - Entities 
     - Commands 

私の作曲ファイルパッケージとPSR-4オートローダの設定。

composer.json

{ 
    "require": { 
     "slim/slim": "^3.0", 
     "symfony/yaml": "3.1", 
     "symfony/console": "3.1", 
     "symfony/process": "3.1", 
     "doctrine/orm": "^2.5", 
     "doctrine/doctrine-bundle": "^1.6", 
     "doctrine/doctrine-cache-bundle": "^1.2", 
     "sabre/xml": "1.1.0", 
     "php-di/php-di": "@dev", 
     "php-amqplib/php-amqplib": "@dev", 
     "ramsey/uuid": "dev-master", 
     "monolog/monolog": "[email protected]", 
     "predis/predis": "~1.0.1", 
     "spipu/html2pdf": "^4.5", 
     "iio/libmergepdf": "~3.0" 
    }, 
    "minimum-stability": "dev", 
    "autoload": { 
     "psr-4": { 
      "src\\ProjectName\\": "src/ProjectName/" 
     } 
    }, 
    "autoload-dev": { 
     "psr-4": { "src\\ProjectName\\Tests\\": "tests" } 
    } 
} 

のindex.php

CategoryController

namespace ProjectName\Api\Controllers; 

class CategoryController 
{ 

    /** 
    * @param \Slim\App $app 
    * @return array 
    */ 
    public function index(\Slim\App $app) 
    { 
     return ['Cats', 'Cats2', 'Cats3']; 
    } 
} 

** routes.phpの**

スリムは、名前空間\プロジェクト名\アピ\コントローラをロードに失敗
$app->get('/v1/category/list', function (Request $request, Response $response) { 
    $response = $response->withHeader('Content-type', 'application/json'); 
    $categoryCtrl = new \ProjectName\Api\Controllers\CategoryController(); 
}); 

\ CategoryController

と何が間違って起こっている任意のアイデア?

よろしく Danyal

+0

私は、 "psr-4":{"src \\ ProjectName \\": "src/ProjectName /"} 'を' 'psr-4 ':{" ProjectName \\ ":" src "/ProjectName/"}' – Eineki

+0

'composer dump-autoload -o'を実行して動作するかどうかを確認します。 –

答えて

2

あなたのcomposer.jsonファイルに間違ったオートローダーの定義を持っています。

パターンは次のとおりです。

"psr-4": { 
    "Namespace\\Prefix\\": "/path/to/source/root" 
} 

だからあなたの場合には、それはおそらく次のようになります。

"autoload": { 
    "psr-4": { 
     "ProjectName\\": "src/ProjectName/" 
    } 
}, 
"autoload-dev": { 
    "psr-4": { "ProjectName\\Tests\\": "tests/" } 
} 

autoload-dev定義は、あなたの中で言及されていないプロジェクトルートパス、下testsディレクトリがありますと仮定しています質問。

+0

あなたは正しいです、私は名前空間にsrcを追加しました。それは今働いている。助けてくれてありがとう。 – danyal14

関連する問題