我正在CakePHP 2.1中编写一个小应用程序,我想使用Nick Baker的文件上传插件。我下载了cakephp2.0分支(我知道还没有完成),并把它放在我的应用程序插件文件夹中。我对它进行了一些必要的修改,但我很好奇,正确的方法是替换那些App::import
函数调用(在FileUploadComponent
,FileUploadBehavior
和FileUploadHelper
类的开头)App:uses
函数。
需要从Config / file_upload_settings.php导入FileUploadSettings
类,从Vendor / upload.php导入Uploader
类。它可以使用require_once
函数完成,但我确信有一种CakePHP方法可以做到。
答案 0 :(得分:28)
从我收集到的内容:
import()
用于外部库uses()
用于框架文件例如:
App::import('Vendor', 'ExternalLibrary');
App::uses('Inflector', 'Cake.Utility');
答案 1 :(得分:11)
根据蛋糕手册App::import()
与require_once()
的工作方式相当。根据我的理解,您将使用App:uses()
和供应商文件使用App:import()
加载类。
API文档说明the following主题:
过去使用
App::import(‘Core’, $class)
加载的所有类都需要使用App::uses()
加载,引用正确的包。这一变化为框架带来了巨大的性能提升。
- 该方法不再以递归方式查找类,而是严格使用
中定义的路径的值App::build()
- 无法加载
App::import('Component', 'Component')
使用App::uses('Component', 'Controller');
。- 不再可以使用
App::import('Lib', 'CoreClass');
加载核心类。导入不存在的文件,提供错误的类型或包名称,或null
和$name
参数的$file
值将导致错误的返回值。App::import('Core', 'CoreClass')
不再受支持,请使用App::uses()
代替自动加载课程。- 加载供应商文件在供应商文件夹中不会递归显示,也不会像过去那样将文件转换为强调文件。
迁移指南还有some things to say约App:uses()
,一般来说,将2.0的最佳实践与1.3及更低版本的旧方法进行比较是一个很好的起点。
This related question处理在Cake 2.0中加载供应商文件,我无法验证JoséLorenzo声称App:import()
是require_once()
的“愚蠢包装”的声明,也不能证明它是包含文件的首选方式。我能为后者找到的唯一参考是在Coding Standards的Cake贡献者中,即。开发人员为Cake核心做出贡献,而不是构建在框架上的应用程序。
修改强>
假设您要导入位于Vendor/twitter
的{{3}},twitteroauth.php
中的主要类文件为Vendor/twitter/twitteroauth/twitteroauth.php
:
App::import('Vendor', 'twitteroauth', array('file' => 'twitter'.DS.'twitteroauth'.DS.'twitteroauth.php'));