Для моего приложения я использую пространства имен PSR-0. Все работает красиво!
Пока я не хотел использовать Twig в качестве парсера шаблонов, Twig использует псевдопространства PEAR. Как Twig_Loader_Filesystem.
Проблема в том, что, когда я хочу использовать Twig внутри моего приложения с расширением имен, например:
<?php namespace Tact\ViewManager; class ViewManager { public function init() { $loader = new Twig_Loader_Filesystem($this->templatepath); $this->twig = new Twig_Environment($loader); } } ?>
PHP скажет автозагрузчику искать класс с именем Tact\ViewManager\Twig_Loader_Filesystem
Как я могу управлять автозагрузкой классов стилей с именами классов PEAR без пространства имен PSR-0 вызывающего класса?
Мой автозагрузчик способен загружать как PEAR, так и PSR-0 ..
Заранее спасибо!
Это происходит потому, что вы находитесь в пространстве имен Tact\ViewManager
. Классы с псевдослоями на самом деле находятся в глобальном пространстве имен, поэтому вы должны префикс их с помощью \
для их вызова:
$loader = new \Twig_Loader_Filesystem($this->templatepath);
Если префикс \
выдает ошибку, вы можете сделать это:
namespace Tact\ViewManager; use Twig_Loader_Filesystem; use Twig_Environment; class ViewManager { public function init() { $loader = new Twig_Loader_Filesystem($this->templatepath); $this->twig = new Twig_Environment($loader); } }
Попробуй это:
$loader = new \Twig_Loader_Filesystem($this->templatepath); $this->twig = new \Twig_Environment($loader);
Это скажет PHP, чтобы заставить поиск пространства имен \ root на уровне «root», и если ваш автозагрузчик настроен для загрузки как пространств имен, так и обычных классов классов PEAR, он будет работать.