我正在设计一个新的应用程序并计划使用CakePHP 3.通常在PHP MVC框架(CakePHP,CodeIgniter)之上设计应用程序时,我实现了一组代表业务层或服务层的单独的类(取决于你喜欢用什么词)。因此,堆栈:
- 观看次数
- 控制器[实际上只是视图的另一部分;来自C#land的代码隐藏]
- 业务层[业务逻辑所在的位置,因为业务逻辑跨越多个域对象并且不适用于单个Model / DAO]
- 模型[又名数据访问对象]
...使用域对象(现在Cake 3中的“实体”)遍历各层。
我发现Cake PHP 3在默认架构中仍缺乏业务层的任何概念,这令人失望,但难以克服。但毕竟,我的问题实际上是行人。它是:我在哪里放MyBusinessLayer.php?在Cake PHP 2中,我会把它放在app / Lib中,并用
加载它
App::Import('Lib', 'MyBusinessLayer');
CakePHP 3中的等价物是什么,我该如何加载它?我意识到我可以把它粘贴到任何旧的地方和require_once(),但我想知道是否有一种方法更符合Cake PHP标准。这个问题可以很容易地应用于十行实用程序类,但在我的情况下,它适用于业务层。
答案 0 :(得分:14)
您的业务层可以放在src
目录下的任何位置。例如,您可以拥有一个名为src/Core
或src/MyBusiness
的文件夹,或者您可以拥有多个文件夹,例如src/Command
src/Handler
,您可以自行决定如何构建其他应用程序而不是提供Web请求或访问数据库中的数据。
如果给定正确的命名空间,则会自动加载放在src
内的任何文件夹中的类。
// in src/MyBusiness/BusinessRules.php
namespace App\MyBusiness;
class BusinessRules
{
...
}
您可以使用use
关键字
// In another file
use App\MyBusiness\BusinessRules;
...
$rules = new BusinessRules();
当涉及到这类对象时,CakePHP不会为您做出假设,因为它们通常非常特定于您的应用程序。它提供了各种各样的工具,可以帮助您更快速地构建更好的架构,并减少代码。例如,使用面向方面编程的Event
系统,创建自适应实现的配置特性或使用功能方法处理数据的Collection
库。