[FuelPHP 1.7] 扩展自动加载器类

我是网站团队的草壁。

我一直在研究如何在 FuelPHP 1.7 中扩展 Autoloader 类,所以我会把它写下来!

关于扩容过程

我想做什么

扩展 \Fuel\Core\Autoloader 类并将其定义为自动加载器类。

 

如何扩展 FuelPHP 核心类

http://fuelphp.jp/docs/1.7/general/extending_core.html (FuelPHP 1.7)

正如这里所说。

如果你不扩展 Autoloader 类,而是扩展例如 Response 类,那就很简单:

class Response extends FuelCoreResponse { }

将其保存为 app/classes/response.php,并在 app/bootstrap.php 的 add_classes 中写入类名和文件路径之间的对应关系。

Autoloader::add_classes(array( 'Response' => APPPATH.'classes/response.php', ));

但是,如果您尝试使用相同的步骤扩展 Autoloader,则会失败。
为什么?因为 Autoloader 是一个例外!

我遇到的困难

上述文档写道:

自动装弹器

Autoloader 类比较特殊,你只能通过 `[ Autoloader] 并使用它。扩展之后,你需要在 `[ app/bootstrap.php]`文件中,在原有的 `[ FuelCoreAutoloader]`,并且不要忘记删除将核心类别名化为全局类的那行代码。

换句话说,这就是我的意思。

 

  1. 手动在 app/bootstrap.php 中引入继承自 FuelCoreAutoloader 的 Autoloader 类文件。
  2. 删除将核心类别名为全局类的行(???)

 

第一个问题我明白了!你应该这样做。

创建 app/classes/autoloader.php 文件

class Autoloader extends FuelCoreAutoloader { }

在 app/bootatrap.php 的开头

需要 APPPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';

如下所述。

 

第二部分我没看懂!我忽略了它,直接打开了页面。

无法重新声明类 Autoloader

我之前一直担心这个问题,不过我已经解决了。

总之,问题出在 public/index.php 文件的第 50 行左右。

class_alias('Fuel\Core\Autoloader', 'Autoloader');

把这段注释掉就行了。

 

这句话的意思是

“将全局命名空间中的自动加载器别名为 FuelCore 命名空间中的自动加载器。”

(有关 class_alias() 的更多信息,请参阅http://php.net/manual/function.class-alias.php

因为有了这个别名,

class Autoloader extends FuelCoreAutoloader { }

这导致自动加载器被定义了两次,并继承了自身。

概括

扩展核心类 Autoloader 时

  1. 创建 app/classes/autoloader.php
    class Autoloader extends FuelCoreAutoloader { }
  2. 在 app/bootstrap.php 的开头
    需要 APPPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';

    描述

  3. public/index.php(大约第 50 行)
    class_alias('Fuel\Core\Autoloader', 'Autoloader');

    注释掉

只要记住这三点,就没问题。

 

如果您觉得这篇文章有用,请点击【点赞】!
0
加载中...
0票,平均分:0.00/10
2,275
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者