在CakePHP 2.1插件中使用App :: uses(而不是App :: import)

时间:2012-01-24 21:34:38

标签: cakephp plugins

我正在CakePHP 2.1中编写一个小应用程序,我想使用Nick Baker的文件上传插件。我下载了cakephp2.0分支(我知道还没有完成),并把它放在我的应用程序插件文件夹中。我对它进行了一些必要的修改,但我很好奇,正确的方法是替换那些App::import函数调用(在FileUploadComponentFileUploadBehaviorFileUploadHelper类的开头)App:uses函数。

需要从Config / file_upload_settings.php导入FileUploadSettings类,从Vendor / upload.php导入Uploader类。它可以使用require_once函数完成,但我确信有一种CakePHP方法可以做到。

2 个答案:

答案 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 sayApp: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'));