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