大家好,我正在制作mvc框架,想使用通过commposer安装的Twig模板系统。我用这个教程MVC这里是我的composer.json文件
{
"require": {
"twig/twig": "~1.0"
},
"autoload":{
"files":[
"config/config.php"
]
}
}
当我将require_once ROOT.'vendorautoload.php'
添加到index.php或bootstrap.php时,我得到了一个错误:
- 可能缺少包含类"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,这是最简单的(我建议你这样做,但教程没有——我认为这是另一个低质量的)。