Composer自动加载树枝模板


Composer autoload twig templates

大家好,我正在制作mvc框架,想使用通过commposer安装的Twig模板系统。我用这个教程MVC这里是我的composer.json文件

{
    "require": {
        "twig/twig": "~1.0"
    },
    "autoload":{
        "files":[
            "config/config.php"
        ]
    }
}

当我将require_once ROOT.''vendor'autoload.php'添加到index.php或bootstrap.php时,我得到了一个错误:

  1. 可能缺少包含类"ItemsController"的文件"items.php"。2."items.php"中缺少方法"index"

但是当我在library/View.php中添加require_one时,如下所示:

class View {
    public $loader;
    public $twig;
    public $arg;
    public function __construct() {
        require_once (ROOT.'/vendor/autoload.php');
        $loader = new Twig_Loader_Filesystem(ROOT.'/application/views');
        $this->twig = new Twig_Environment($loader);
    }
}

它工作得很好,问题在哪里?当我在View类之外添加自动加载时,如何使它工作?所有的建议都会很有帮助,谢谢。

该教程使用__autoload()函数,这使得它与它自己的自动加载器(包括Composer)附带的所有功能都不兼容。

这个限制是由于PHP不能允许定义两次函数,所以只能有一个自动加载函数(它是在PHP 5.0中引入的)。为了解决想要添加多个自动加载程序的问题,从PHP 5.1.2开始的每个人都被要求不要定义function __autoload(),而是使用spl_autoload_register()注册函数回调。

PHP 5.1.2于2006年1月发布!

现在想想MVC教程的质量,它在2015年甚至没有自动加载(它在2013年发布,这并没有让它变得更好)。

事实上,Composer可以在这里帮助你。你也可以使用它来自动加载你自己的类,但如果你使用名称空间,坚持PSR-4,或者不使用PSR-0,这是最简单的(我建议你这样做,但教程没有——我认为这是另一个低质量的)。