[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]`,并且不要忘记删除将核心类别名化为全局类的那行代码。
换句话说,这就是我的意思。
- 手动在 app/bootstrap.php 中引入继承自 FuelCoreAutoloader 的 Autoloader 类文件。
- 删除将核心类别名为全局类的行(???)
第一个问题我明白了!你应该这样做。
创建 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 时
- 创建 app/classes/autoloader.php
class Autoloader extends FuelCoreAutoloader { } - 在 app/bootstrap.php 的开头
需要 APPPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
描述
- public/index.php(大约第 50 行)
class_alias('Fuel\Core\Autoloader', 'Autoloader');注释掉
只要记住这三点,就没问题。
0