peterfox / hexavel
Hexavel 框架
Requires
- php: >=5.6.4
- peterfox/hexavel-components: ~1.3.3
Requires (Dev)
- behat/behat: ^3.0
- fzaninotto/faker: ~1.4
- mockery/mockery: 0.9.*
- peterfox/hexavel-behat: ~1.1
- phpspec/phpspec: ~2.3
This package is not auto-updated.
Last update: 2024-09-14 18:36:47 UTC
README
Hexavel 是 Laravel 的重构版本,旨在提供更好的工作流程,简化开发过程。
安装
要使用 composer 安装,请使用以下命令
composer create-project --prefer-dist peterfox/hexavel <name of your project>
与 Laravel 有何不同?
文件结构
Hexavel 使用了一个广泛更改的文件系统,用于从 Laravel 生成一个工作应用程序。每个文件夹都有解释,这样您可以了解在哪里找到或放置自己的工作。
二进制文件(bin)
这是放置所有控制台应用程序的地方,包括 artisan 控制台和通过 composer 安装的二进制文件。所有 artisan 的命令都像 Laravel 一样工作,但现在您必须从应用程序的根目录使用 bin/artisan
。
源代码(src)
这是放置我们的基础 PHP 应用程序代码的地方,使用默认命名空间 \App。
应用程序(app)
目前,这仅存储我们的应用程序配置和路由文件。
支持
这是我们与 Laravel 的最大不同之处。支持就是其名字的含义,是一个用于存放所有支持我们应用程序开发文件的目录。这包括默认的视图、资产、语言文件、测试和迁移。
还有一个支持包文件夹,这是您可能正在开发或作为项目一部分开发的本地包的推荐位置,可以通过 composer 加载。
变量(var)
变量目录实际上是我们应用程序的可写目录。所有缓存和应用程序写入的数据都应存储在此目录下。例如,引导缓存、日志或 sqlite 数据库。
六边形架构
六边形架构是一个简单的概念的华丽名称,您应该将代码分成框架、领域以及您的应用程序交互的服务和库之间的连接。
Laravel
与您的应用程序核心相关联的代码,在本例中是 Laravel 特定代码,如服务提供者或控制器。
桥接
与应用程序使用的服务或库相关联的代码。
领域
与您的业务需求相关联且与桥接和框架分开的代码。
内置的存储库模式
存储库模式非常重要,当您使用 Eloquent 创建模型时非常有用。为了简化这一点,包含了一个服务提供程序,它允许您将模型映射到存储库,并将领域中的存储库接口映射到模型接口。
示例存储库
namespace App\Bridge\Eloquent; use App\Bridge\Eloquent\Model\User; use App\Domain\AuthenticatableRepository as AuthenticatableRepositoryInterface; use Hexavel\Repository\EloquentRepository; use Illuminate\Contracts\Auth\Authenticatable; class AuthenticatableRepository extends EloquentRepository implements AuthenticatableRepositoryInterface { public function getModel() { return User::class; } /** * @param string $email * @return Authenticatable */ public function findByAuthIdentifier($email) { return $this->model->where('email', $email)->first(); } }
然后将模型和存储库添加到服务提供程序中。
namespace App\Laravel\Providers; use App\Bridge\Eloquent\Model\User; use App\Bridge\Eloquent\AuthenticatableRepository; use App\Domain\AuthenticatableRepository as AuthenticatableRepositoryInterface; use Hexavel\Support\Providers\RepositoryProvider as ServiceProvider; class RepositoryServiceProvider extends ServiceProvider { /** * @return string[] */ protected function getModelRepositories() { return [ AuthenticatableRepository::class => User::class ]; } /** * @return string[] */ protected function getRepositories() { return [ AuthenticatableRepositoryInterface::class => AuthenticatableRepository::class ]; } }
测试
测试是您正在开发的任何良好应用程序的重要组成部分。Hexavel 包括使用 Behat 和 PHPSpec 的简单设置,以便您可以测试您开发和功能。
Behat
您的功能文件可以创建在 support/features 下,而测试套件的功能上下文在 support/context 下。您可以通过 bin/behat
或通过调用 gulp behat
来运行测试。
为了使代码分离更容易,该设置已准备好使用 页面模式 作为通过 Behat 测试应用程序交互的方式。
PHPSpec
类规范存储在support/spec目录中,可以通过使用phpspec命令bin/phpspec desc <Namespace\\Class>
简单地创建它们,然后您可以调用bin/phpspec run
或gulp phpSpec
来执行测试。
警告
并非所有为Laravel开发的包都能直接与Hexavel兼容。大部分可以,除非它们将代码安装到您的项目中。Laravel Spark就是这样一个例子,当它使用多个占位符并添加资产等。
其他资源
- Hexavel Spark是一个包,它通过安装占位符使Spark与Hexavel兼容。
- Hexavel Components位于Laravel框架和Hexavel之间。
- Hexavel Behat包含设置Behat以供Hexavel使用的上下文。