2015-12-08 107 views
6

我有一个新的PHP类,我想从控制器调用。在CakePHP文件夹结构中,我应该放置这个新类,以及从控制器调用或使用它的过程是什么?预先感谢您的合作!在CakePHP 3中放置自定义PHP类的位置?

+1

如果你想从控制器中使用它,为什么你不能创建一个组件? – ADmad

+0

是您为CakePHP应用程序或第三方资源编写的类吗? – drmonkeyninja

+0

@drmonkeyninja是第三方课程。它有什么区别? – Jorge

回答

12

从我的角度来看,你可以重复使用任何自己的类以及任何第三方类作为实用类。如果是这样,那么你可以将该类放入src/Utility文件夹中。请使用适当的命名空间。之后,您可以在CakPHP 3.x的任何位置使用该课程。

如何放置:

说,你有一个名为Jorge类,它保存到使用文件名Jorge.phpsrc/Utility文件夹。将namespace App\Utility;声明放在您的Jorge.php文件的顶部。

使用方法:

在哪个文件要使用这个类,只是把use App\Utility\Jorge;。之后,您可以将该课程称为该文件。

替代解决方案:

如果你有很多类的第三方软件包,则可以按照https://stackoverflow.com/a/28527683/1787600

0

您创建的大多数CakePHP派生代码都将归入文档概述的结构。

http://book.cakephp.org/3.0/en/intro/cakephp-folder-structure.html

对于“完全随心所欲的工具类”,我猜你的意思,CakePHP的对待那些作为“第三方依赖”(概念),他们建议把他们在“供应商”文件夹中。当新内容是您自己的实用程序项目时,您可以忽略他们的建议,以便不编辑该文件夹中的内容。

对于加载,使用良好的旧的php的require功能家族。

http://book.cakephp.org/3.0/en/core-libraries/app.html

如果你碰巧在应用程序中不使用作曲家来,你将需要手动加载所有的供应商库自己。

您可以使用CakePHP全局常量/函数来构建require所需的路径。

http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html

APPAPP_DIRWWW_ROOT

+4

“*对于加载,请使用良好的旧php功能。*” - CakePHP使用名称空间和PSR自动加载器。除了使用古代代码之外,几乎没有必要再使用require。只要确保命名空间和路径匹配,并且在使用时会自动找到该类。 – burzum

+0

当然,假设他会创建一个闪亮的现代文件,他可以使用自动加载。但是,如果他没有使用一整套现代化的公用设施,那么也许像使用旧式的第三方图书馆那样使用旧式的“包含”会更容易一些?如果他确定要写一个函数而不是一个类呢? OP的问题是以课程为中心,但更常见的情况是“我将要从一个文件中加载任何东西,甚至可能使用一套精心制作的旧套库来加载任何不适合的数据/图像/声音/视频PSR自动加载“。 – starlocke

0

你可以把它放在任何地方,你在/ src目录/文件夹需要。你可以收集你的自定义类的文件夹,如:界面,DTO,实用程序,自定义或其他。由于cakePHP 3.x使用PSR-4自动加载器,所以类将在使用后实例化。你只需要记住添加正确的名称空间。 例如如果您想使用自定义界面添加文件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; 
} 
... 

然后你可以使用它了:

... 
class UsersTable extends Table implements Owned 
{ 
... 

如果你打算重用你的类更好的解决办法是创建自己的packagist包和作曲家包括它,所以它会被存储in“/ vendor”

相关问题