Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CakePHP3中的何处放置自定义PHP类?_Php_Cakephp_Cakephp 3.0 - Fatal编程技术网

在CakePHP3中的何处放置自定义PHP类?

在CakePHP3中的何处放置自定义PHP类?,php,cakephp,cakephp-3.0,Php,Cakephp,Cakephp 3.0,我有一个新的PHP类,我想从控制器调用它。在CakePHP文件夹结构中,我应该将这个新类放在哪里?从控制器调用或使用它的过程是什么?提前感谢您的合作 您要创建的大多数CakePHP派生代码都属于文档中概述的结构 对于我猜您的意思是“完全任意的实用程序类”,CakePHP将它们视为“第三方依赖项”(概念上),他们建议将它们放在“供应商”文件夹中。当新内容是您自己的实用程序项目时,您可以忽略他们不编辑该文件夹中内容的建议 对于加载,使用好的旧php的require函数系列 如果您碰巧没有在应用程

我有一个新的PHP类,我想从控制器调用它。在CakePHP文件夹结构中,我应该将这个新类放在哪里?从控制器调用或使用它的过程是什么?提前感谢您的合作

您要创建的大多数CakePHP派生代码都属于文档中概述的结构

对于我猜您的意思是“完全任意的实用程序类”,CakePHP将它们视为“第三方依赖项”(概念上),他们建议将它们放在“供应商”文件夹中。当新内容是您自己的实用程序项目时,您可以忽略他们不编辑该文件夹中内容的建议

对于加载,使用好的旧php的
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
{
...