2017-02-15 8 views
0

私は[root]/composer.jsonファイルに次のクラスの自動ロードの定義があります。クラスが見つからない、作曲とZend Frameworkの1オートローダの問題

PHP Fatal error: Uncaught Error: Class 'classes\DependencyInjection' not found in /var/www/html/application/bootstrap.php:29

:私は、次のエラーを得た [root]/public_html/index.phpページを呼び出すと

{ 
    ... 
    "autoload": { 
    "psr-0": { 
     "": [ 
     "application/models", 
     "application/controllers", 
     "application/forms", 
     "library/" 
     ] 
    }, 
    "psr-4": { 
     "": ["src/"] 
    }, 
    "classmap": [ 
     "app/AppKernel.php", 
     "app/AppCache.php" 
    ] 
    }, 
    ... 
} 

$bootstrap = true; 
require_once '../application/bootstrap.php'; 
[root]/public_html/index.phpには何が

は、次のコードです3210

そして、何[root]/application/bootstrap.phpファイル内にありますです:

// turn on autoloading for classes 
// composer autoloader 
include(MMIPATH.'/vendor/autoload.php'); 

// zend autoload 
require_once 'Zend/Loader/Autoloader.php'; 
Zend_Loader_Autoloader::getInstance(); 

$diContainer = new classes\DependencyInjection(services.yaml'); 
$proxy  = $diContainer->get('containerProxy'); 

これは[root]/library/classes/DependencyInjection.phpの定義です:

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; 
USE Symfony\Component\DependencyInjection\Container; 

class DependencyInjection extends ContainerBuilder 
{ 
    .... 
} 

ここで間違っているのですか?オートローダがそのクラスを見つけられないのはなぜですか?

答えて

0

"クラス"名前空間を読み込もうとしていますが、そのクラスは "クラス"名前空間にあるとは定義されていません。 PSR-0負荷{paths}\classes\DependencyInjection.phpおよび名前空間classesからクラスDependencyInjectionをインスタンス化する試みにおいて

new classes\DependencyInjection(...)が、DependencyInjectionclasses名前空間ではありません。ファイルはロードされますが、クラスは存在しません。

これらのクラスのそれぞれにnamespace classes;を追加することはできますが、それは良い解決策ではありません。適切な名前空間を使用するか、ライブラリ/クラスを含むようにPSR-0リストを変更し、new DependencyInjection(...)を使用するとよい解決法です。 (私の投票は最初のものです - 適切な名前空間を使用してください)

要求通りです。例:

ファイルの場所
{app}\library\UsefullNamespace\DependencyInjection.php

DependencyInjection.php new UsefullNamespace\DependencyInjection.php

を使用してそれを呼び出す:あなたは絶対に持っていない場合

namespace UsefullNamespace; 

use [...]; 

class DependencyInjection extends ContainerBuilder 
{ 
+1

また... ZF1は使用しないでくださいに。これは完全に廃止され、廃止され、廃止されました。 –

+0

いくつかの例を追加できますか?両方のソリューションの? – ReynierPM

+0

が追加されました - 代替は本当に解決策ではなく、PSR-0(わからない)で動作しない可能性もあります。便利な名前空間は、実際にあなたのアプリに使用するのに理にかなったものです。 –

関連する問題