2016-08-17 7 views
0

コンポーザーとpsr-0を初めて使用しています。私は作曲家とpsr-0を使って小さなアプリを試しました。私は特定のクラスを読み込むために名前空間を使用しました。私がコンポーザーベンダ/ autoloadを使ってクラスを呼び出すと、クラスが見つかりません。エラーです。Composer Autoloadがクラスをロードしていません

マイcomposer.jsonファイル:/var/www/html/silexapp/vendor/autoload.php

{ 
"require": { 
    "silex/silex": "~2.0", 
    "symfony/console": "~2.6" 
}, 
"autoload": { 
    "psr-0": { 
     "MyApp": "/silexapp/app" 
    } 
} 
} 

私の作曲ベンダーの自動ロードファイル/var/www/html/silexapp/composer.json

 <?php 

     // autoload.php @generated by Composer 

    require_once __DIR__ . '/composer' . '/autoload_real.php'; 

    return ComposerAutoloaderInitf7241d907c173a8d77da0791cc918856::getLoader(); 

私のクラスファイル名Underline.php:/var/www/html/silexapp/app/Tnq/Todo/Command/Underline.php

 <?php 
     namespace MyApp\Tnq\Todo\Command; 
    class Underline{ 

     public function add($a,$b){ 

     return $result = $a+$b; 

    } 

    } 

    ?> 

マイanothe Rクラスファイル名Bold.php:/var/www/html/silexapp/app/Tnq/Todo/Command/Bold.php

<?php 
    require_once "../../../../vendor/autoload.php"; 
    //require_once "Underline.php"; 

    use MyApp\Tnq\Todo\Command as tool; 

    echo "this is the index file to check namespace."; 
    $c = new tool\Underline(); 
    echo "============================="; 
    echo "Addition : ".$c->add(2,2); 
    ?> 

私は私のbold.phpクラスの「クラスが見つからないエラー」を取得していますファイル、私はautoloadファイルを使用します。しかし、下線クラスファイルを直接インクルードすると、出力が得られます。自動ロードを使用すると、なぜ機能しないのですか?

誰でも問題を見つけるのを手助けできますか?

答えて

1

「キーは、」作業ディレクトリに相対する必要があることを、あなたは「値」として置いパスの下のディレクトリでなければなりません。簡単な方法でそれを見るには、namespaceはディレクトリ構造をマップする必要があります。 MyAppディレクトリがありません。あなたのcomposer.json

の場合は持っている:

"autoload": { 
     "psr-0": { 
      "MyApp\\": "app/" 
     } 
    } 

は、その後、あなたはapp/MyAppディレクトリを必要としています。これを試してみてください:

composer.json:

// /var/www/html/silexapp/composer.json 
{ 
    "require": { 
     "silex/silex": "~2.0", 
     "symfony/console": "~2.6" 
    }, 
    "autoload": { 
     "psr-0": { 
      "Tnq\\": "app/" 
     } 
    } 
} 

Underline.php:

<?php 
// /var/www/html/silexapp/app/Tnq/Todo/Command/Underline.php 
namespace Tnq\Todo\Command; 

class Underline 
{ 
    public function add($a,$b) 
    { 
     return $result = $a+$b; 
    } 
} 

Bold.php:理論的には

<?php 
// /var/www/html/silexapp/app/Tnq/Todo/Command/Bold.php 
require_once "../../../../vendor/autoload.php"; 

use Tnq\Todo\Command as tool; 

echo 'this is the index file to check namespace.' . PHP_EOL; 
$c = new tool\Underline(); 
echo "============================="; 
echo "Addition : ".$c->add(2,2); 

、作品は(テストしないでください。 ))


ソース:

+0

感謝。できます。私は実際にパスを間違えた。 – malar

関連する問題