18

私は次のようなプロジェクト構造を持っています:

src/
   ├─ Model/
      └─ User.php

私の User.php ファイルは次のようになります。

<?php
namespace Bix\Model;

class User {

そして、私の composer.json オートローダーはこれです:

"autoload": {
    "psr-4": {
      "Bix\\": "src/"
    }
  }

最後に私のbootstrap.phpはこれです:

use Bix\Model\User;

// PSR-4 Autoloader.
require_once "vendor/autoload.php";

ただし、を作成しようとするとnew User()、エラーが発生しますFatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

composer autoload_psr4.php ファイルを見ると、問題ないようです。

// autoload_psr4.php @Composer で生成

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

return array(
    'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
    'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
    'KeenIO\\' => array($vendorDir . '/keen-io/keen-io/src'),
    'Bix\\' => array($baseDir . '/src'),
); 

上記のどこが間違っているのか、誰でも指摘できますか?

4

1 に答える 1

27

まず、Linux (どの PC を使用しているかはわかりません) では大文字と小文字が区別されます。オートローディングで、 を定義src/bixしましたが、それはsrc/Bixです。

しかし、もっと重要なことは、PSR-4 では、指定された名前空間プレフィックスがディレクトリ構造に含まれていないことです(ディレクトリが 1 つしか含まれないようにするため)。あなたの場合、構成する場合、"Bix\\": "src/"クラスBix\Model\Userは に配置する必要がありsrc/Model/User.phpます。


編集: PHP 名前空間を誤解しています。Bix\ModelPHPでは、「からすべてをこのファイルのグローバル名前空間にインポートする」とは言っていませuse Bix\Model;Model代わりに、「このファイル内のエイリアス」を意味しますBix\Model

したがって、次のいずれかを行う必要があります。

require_once "vendor/autoload.php";

use Bix\Model;

$user = new Model\User();

また:

require_once "vendor/autoload.php";

use Bix\Model\User;

$user = new User();
于 2015-05-09T08:43:35.020 に答える