2

以下に説明するように2つのファイルがあります。

パス:index.php

<?php
// Composer autload
require_once 'vendor/autoload.php';

//The commented code below works:
//$loader = new Twig_Loader_String();
//$twig = new Twig_Environment($loader);
//echo $twig->render('Hello {{ name }}!', array('name' => 'Fabien'));

//Bad proposal solution. How to avoid to explicit load all files with namespaces?
//  Please see the 'Important edit' below.
//include_once 'Core/Twig/Twig.php';
use Core\Twig\Twig as Twig;

$twig = new Twig();
var_dump($twig);

パス:Core / Twig / Twig.php

<?php
namespace Core\Twig;

class Twig
{
    public function configure()
    {
        $loader = new \Twig_Loader_String();
        $twig = new \Twig_Environment($loader);
        //just for testing
        echo $twig->render('Hello {{ name }}!', array('name' => 'Fabien'));
    }
}

しかし、致命的なエラーが発生していますClass 'Core\\Twig\\Twig' not found

どうすればこれを解決できますか?

PS:名前空間(、のような)、使用(、、のような)、および新しい(、のような)にいくつかCore\TwigCoreバリエーションTwigを試しCore\Twigました。残念ながら、何も機能しません。Core\Twig as TwigTwig\Twig()Core\Twig

重要な編集: phpがクラスを見つけられなかった理由を理解しました。のようなラインinclude_once 'Core/Twig/Twig.php'が必要でした。しかし、問題はまだ続いています...どうすればこれを回避できますか?名前空間を持つすべてのファイルを含めることを避けますか?または、必要なときにこのファイルを自動ロードするにはどうすればよいですか?

4

2 に答える 2

2

名前空間を誤ってマークしている可能性があります。この名前空間入門書の「名前空間のインポート:キーワードの使用」セクションを確認してください。

パス:lib / vendor / core / Twig.php

<?php
namespace lib\vendor\core;

class Twig
{
    //Your code
}

パス:index.php

use lib\vendor\core\Twig;
$twig = new Twig();
var_dump($twig);
于 2013-03-24T15:53:35.457 に答える
0

いくつかのテストの後、私は答えに到達しました。の検査vendor/autoload.php

明示的ではないものが必要です(少なくとも私にとっては)。

私たちはcomposer.json置く必要があります

psr-0 : {
    "MyNamespace" : "MyOwnVendorName"
}

この場合、次のコードを実行する必要があります。

Path: index.php

<?php
// Composer autload
require_once 'vendor/autoload.php';

use classes\MyApp\Twig\Twig;

$twig = new Twig;
var_dump($twig);

Path: core/classes/MyApp/Twig/Twig.php

<?php
namespace MyApp\Twig;

class Twig
{
    public function configure()
    {
        $loader = new \Twig_Loader_String();
        $twig = new \Twig_Environment($loader);
        //just for testing
        echo $twig->render('Hello {{ name }}!', array('name' => 'Fabien'));
    }
}

composer.json

{
    "psr-0" : {
        "MyApp" : "core/classes/"
    }
}

次に実行しますphp composer.phar udpate

于 2013-04-09T00:34:31.230 に答える