2015-05-09 41 views
7

benim proje yapısı şöyle olması bulunamadı:PSR-4 autoloader Önemli hata: Sınıf

Benim User.php dosyası şuna benzer
src/ 
    ├─ Model/ 
     └─ User.php 

:

<?php 
namespace Bix\Model; 

class User { 

Ve composer.json autoloader

:

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

Son olarak benim bootstrap.php şudur: bu Deneyip bir new User() oluşturursanız

use Bix\Model\User; 

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

Ancak, ben ok görünüyor dosya besteci autoload_psr4.php baktığımızda hata Fatal error: Class 'User' not found in /var/www/public/api/v1/index.php on line 8

olsun:

// autoload_psr4.php Besteci

tarafından @generated
$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'), 
); 

yukarıda ile yanlış gidiyorum herkes gösterebilir misiniz? Her şeyden

cevap

14

Birincisi, Linux (Sana kullandığınız PC emin değilim) harf duyarlıdır. Otomatik yüklemenizde, src/Bix iken src/bix'u tanımladınız.

Fakat daha da önemlisi, PSR-4 ile belirtilen ad alanı öneki, dizin yapısında (yalnızca bir dizin içeren dizinlerden kaçınmak için) değil 'dır. Eğer "Bix\\": "src/" ayarlarsanız e durumda, bir sınıf Bix\Model\Usersrc/Model/User.php içinde yer almalıdır.


DÜZENLEME: Sen PHP ad alanlarını yanlış anlıyorsun. PHP, sen use Bix\Model; ile "Bu dosya için genel ad haline Bix\Model kadar her şeyi ithal" söylemiyoruz. Bunun yerine, şu anlama gelir: "Bix\Model bu dosyada Alias ​​Model". Yani

ya yapmalısınız:

require_once "vendor/autoload.php"; 

use Bix\Model; 

$user = new Model\User(); 

ya: Buna "src /" ve klasör yapısını: "Bix \\":

require_once "vendor/autoload.php"; 

use Bix\Model\User; 

$user = new User(); 
+0

Bunun için composer.json güncellenmiş : src/Model/User.php ancak orada hala hata özdevinimli_yükle yapılandırmasını güncelleştirmek sonra – JeremyKirkham

+1

@JeremyKirkham 'sınıf Kullanıcı bulunamadı' olsun, sen autoloader güncellemek için 'besteci dökümü-autoload' çalıştırmak zorunda –

+0

zaten bu yapmış . Sorunumu yeni klasör/yapı autoloader ile güncelledim. – JeremyKirkham