类的自动载入
使用 PHP 自身的 include 或者 require 族的函数载入重用代码一般情况下很难帮助我们更好的组织工程代码,对于此,从便捷和性能的方面考虑, Laravel3 为我们提供了类的自动载入功能。自动载入可以让我们在需要的时候才载入所需要的类文件。这样就不必再考虑文件载入的逻辑组织,提供了很大方便。
模型 models 和类库 libraries 文件夹已经默在 application/start.php 文件中写到自动载入类的配置中。载入器通过文件名载入类,这些文件名命名必须要写成类名的小写形式。比如, User 类在 models 文件夹内,那么你应该将此类文件名命名为 user.php 。当然也可以在子目录中载入类,但是一定要让类的命名空间与目录结构对应。比如,命名空间为 Entities\User 的 model 类,应该写在 models 文件夹下的 entities 子文件夹内的 user.php 文件内。
注册需要自动载入的类的所在目录:
Autoloader::directories(array( path(‘app‘).‘entities‘, path(‘app‘).‘repositories‘, ));
其中 application 的目录位置可以使用 path(‘app’) 来获得,这样就避免的了迁移应用时所做的不必要的修改。
如果觉得通过文件名反射的方式不够灵活,还可以自己配置,类名与载入文件的对应关系,如下:
Autoloader::map(array( ‘User‘ => path(‘app‘).‘models/user.php‘, ‘Contact‘ => path(‘app‘).‘models/contact.php‘, ));
遵循 PSR-0 规范的做编写的类库,其文件夹结构和类命名存在对应关系,所以可以按照命名空间注册自动加载:
Autoloader::namespaces(array( ‘Doctrine‘ => path(‘libraries‘).‘Doctrine‘, ));
在 PSR-0 前,很多类库都是使用下划线来标注类库的结构的,如果要注册这种类库为自动加载可以这样写,比如,你要使用 SwiftMailer ,我们可以注意到所有的类都以 Swift_ 开头,所以我们可以注册 Swift ,并且指向 SwiftMailer 的根目录:
Autoloader::underscored(array( ‘Swift‘ => path(‘libraries‘).‘SwiftMailer‘, ));