[FuelPHP 1.7] 扩展 Autoloader 类
我是 WEB 团队的日下。
我想知道如何在 FuelPHP 1.7 中扩展 Autoloader 类,所以我把它写下来!
我想做的事
扩展 \Fuel\Core\Autoloader 类并将其定义为 Autoloader 类
如何扩展 FuelPHP 的核心类
http://fuelphp.jp/docs/1.7/general/extending_core.html(FuelPHP 1.7)
正如这里所写。
如果您想扩展 Response 类而不是 Autoloader,会更容易。
响应类扩展了 FuelCoreResponse { }
可以保存为app/classes/response.php,并在app/bootstrap.php的add_classes中写入类名和文件路径的对应关系。
Autoloader::add_classes(array( 'Response' => APPPATH.'classes/response.php', ));
但是,当我尝试使用相同的步骤扩展自动加载器时,它不起作用。
为什么?因为自动加载器是一个例外!
我担心的地方
文档底部写的内容:
自动装载机
Autoloader 类是一种特殊情况,您只能将其扩展为 [
Autoloader]
并使用它,扩展后您必须在原始 [FuelCoreAutoloader]
app/bootstrap.php],不要。不要忘记删除将核心类别名为全局的行。
换句话说,就是这个意思。
- 手动要求在 app/bootstrap.php 中扩展 FuelCoreAutoloader 的 Autoloader 类文件
- 删除将核心类别名为全局的行(???)
我明白了,就照着做吧!
创建 app/classes/autoloader.php 并
类 Autoloader 扩展 FuelCoreAutoloader { }
在app/bootatrap.php的开头
需要 APPPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
描述。
第二个意思我没看懂,就忽略了,打开了页面。
无法重新声明类自动加载器
我已经被这个问题困扰了一段时间,但我已经解决了。
从结论来看,public/index.php的第50行左右
class_alias('Fuel\Core\Autoloader', 'Autoloader');
如果你把这个注释掉就可以了。
这行的意思是
“创建从全局命名空间中的 Autoloader 到 FuelCore 命名空间中的 Autoloader 的别名”
是。 参见http://php.net/manual/function.class-alias.php的 class_alias()
因为这个别名,
类 Autoloader 扩展 FuelCoreAutoloader { }
在本例中,Autoloader 被定义了两次并继承了自身。
总之,
扩展核心类Autoloader时
- 创建app/classes/autoloader.php
类 Autoloader 扩展 FuelCoreAutoloader { }
- 在app/bootstrap.php的开头
需要 APPPATH.'classes'.DIRECTORY_SEPARATOR.'autoloader.php';
描述
- public/index.php(第 50 行左右)
class_alias('Fuel\Core\Autoloader', 'Autoloader');
注释掉
只要控制好这三点就可以了。看来后面的事情进展顺利。