在CakePHP3中的何处放置自定义PHP类?
我有一个新的PHP类,我想从控制器调用它。在CakePHP文件夹结构中,我应该将这个新类放在哪里?从控制器调用或使用它的过程是什么?提前感谢您的合作 您要创建的大多数CakePHP派生代码都属于文档中概述的结构 对于我猜您的意思是“完全任意的实用程序类”,CakePHP将它们视为“第三方依赖项”(概念上),他们建议将它们放在“供应商”文件夹中。当新内容是您自己的实用程序项目时,您可以忽略他们不编辑该文件夹中内容的建议 对于加载,使用好的旧php的在CakePHP3中的何处放置自定义PHP类?,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我有一个新的PHP类,我想从控制器调用它。在CakePHP文件夹结构中,我应该将这个新类放在哪里?从控制器调用或使用它的过程是什么?提前感谢您的合作 您要创建的大多数CakePHP派生代码都属于文档中概述的结构 对于我猜您的意思是“完全任意的实用程序类”,CakePHP将它们视为“第三方依赖项”(概念上),他们建议将它们放在“供应商”文件夹中。当新内容是您自己的实用程序项目时,您可以忽略他们不编辑该文件夹中内容的建议 对于加载,使用好的旧php的require函数系列 如果您碰巧没有在应用程
require
函数系列
如果您碰巧没有在应用程序中使用Composer,则需要自己手动加载所有供应商库
您可以使用CakePHP全局常量/函数来构建require
所需的路径
APP
,APP\u DIR
,WWW\u ROOT
,等等。从我的角度来看,您可以将任何自己的类和任何第三方类作为实用工具重新使用。如果是这样,那么您可以将该类放入src/Utility
文件夹中。请使用正确的命名空间。之后,您可以在cakphp3.x中的任何位置使用该类
如何放置:
比如说,您有一个名为Jorge
的类,使用文件名Jorge.php
将其保存到src/Utility
文件夹中。放置名称空间应用程序\实用程序代码>语句位于Jorge.php
文件的顶部
如何使用:
在要使用此类的文件中,只需将use-App\Utility\Jorge代码>。之后,可以将该类调用到该文件中
替代解决方案:
如果您有一个包含许多类的第三方软件包,那么您可以按照的要求将其放在/src/文件夹中的任何位置。您可以在诸如Interface、DTO、Utility、custom等文件夹中收集自定义类。由于cakePHP 3.x使用PSR-4 autoloader,因此一旦使用该类,该类将被实例化。您只需要记住添加正确的名称空间。
例如,如果要使用自定义接口,请添加文件src/custom/Owned.php
<?php
namespace App\Custom;
interface Owned
{
/**
* Find username owning object by object primary id
* @param $id
* @return string|int
*/
public function owner($id) : string;
}
...
如果要重用类,更好的解决方案是创建自己的PackageGist包,并由composer将其包括在内,以便将其存储在“/vendor”中如果您想从controller使用它,为什么不能制作一个组件?该类是您为CakePHP应用程序或第三方资源编写的吗?@drmonkeynija是第三方类。这有什么区别吗?“对于加载,使用好的旧php的require函数族。”-CakePHP使用名称空间和PSR自动加载程序。除了使用古代代码外,几乎没有必要再使用require。只要确保名称空间和路径匹配,它就会在使用时自动找到该类。当然,假设他将编写一个闪亮的现代文件,他可以自动加载。然而,如果他没有使用一整套现代化的实用程序,也许使用一个老式的include
会更容易,比如当他使用一些老式的第三方图书馆时?如果他确定要写函数而不是类呢?OP的问题是以类为中心的,但是,更一般的情况是“我想从文件中加载任何东西,甚至可能是一些数据/图像/声音/视频,使用一套制作良好的、不适合PSR自动加载的旧库”。你能在cakephp 3中提供上面的参考吗。6@Er.AmitJoshi,到目前为止,CakePHP3的任何版本都是一样的。
...
class UsersTable extends Table implements Owned
{
...