【问题标题】:Composer autoload twig templatesComposer 自动加载树枝模板
【发布时间】:2015-02-19 04:55:57
【问题描述】:

大家好,我正在制作 mvc 框架并想使用通过 composer 安装的 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_once 时:

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 类之外添加自动加载时,问题出在哪里?所有建议都会有所帮助,谢谢。

【问题讨论】:

  • 那个教程与MVC无关
  • 你能给我一个更好的例子吗?

标签: php twig composer-php


【解决方案1】:

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

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

PHP 5.1.2 于 2006 年 1 月发布!

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

事实上,Composer 可以在这方面为您提供帮助。您也可以使用它来自动加载您自己的类,但如果您使用命名空间,则坚持 PSR-4 或不使用 PSR-0,这是最简单的(我建议您这样做,但该教程没有 - 另一个低质量,我会说)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多