Pingpong modules 似乎是为早期版本的 Laravel 5 构建的,我无法说它们与未来版本(可能是当前的 5.1.11)的兼容程度。
查看 2.1 的提交历史并没有太多活动,截至今天(12 月 18 日),最后一次提交是在 6 个月前。
但是这个包是专门为 Laravel 设计的吗?它似乎。它们提供了许多对开发有用的功能。唯一不幸的是,您在自己的git 环境中获得了大量代码(这是一件好事吗?我不知道,您更喜欢什么)。
我个人不喜欢以这种方式进行开发,我更喜欢将它们放在vendor/ 文件夹中,否则将其更新到新版本会很痛苦。
自从 Laravel 5 以来,Taylor 希望不再像在 Laravel 4 中那样使包开发变得过于具体。使用Laravel 制作包的唯一方法是使用ServiceProvider' s。 ServiceProvider 是 Laravel 应用程序的引导程序。
如果您想扩展或实现自己的功能,请分叉存储库并在其之上自行构建并托管(通过 github/packagist 或使用 Satis 的私有存储库)。
Pingpong 模块 (2.1) 是为 Laravel 5 构建的,您描述的它们(嵌入式 Laravel 包)更适用于 Laravel 4,因为您必须以更具体的方式编写包。
但是,还有其他选择吗?
当您想要一个更活跃的项目/包进行开发时,您应该试用 Asgard CMS。它们是非常模块化的,我想我在某处读到它是受到这个包的启发(完全不确定)。
打造自己怎么样?
当然,您可以构建自己的包来达到相同的效果。并根据需要将其创建为模块化。我为我的公司创建了很多modules,我们可以非常轻松地创建整个系统并使用和扩展/覆盖模块。即使是模块中的小部分也可以被覆盖以满足项目的特定需求。
对于 CMS/API 模块,我们选择了与 Laravel 项目的 app/ 文件夹几乎相同的结构。
一个包看起来像:
tests/
src/
Acme/
Controllers/
Requests/
Models/
Module.php // contains some specifc calculations for example
ModelServiceProvider.php
composer.json
在composer.json 文件中,我们自动加载:"Module\\": "src/"
在config/app.php 中,我们注册ModuleServiceProvider。现在我们将功能注入到 Laravel 的容器中,我们可以通过 app() 实例使用它。
但每当我们只想在另一个项目或独立项目中使用Models 时,我们仍然可以使用它,因为composer 的自动加载功能以及我们构建包的方式。可以使用:
<?php
require_once __DIR__ .'/vendor/autoload.php';
use Module\Models\Module;
$module = new Module;
编辑
我们喜欢使用的包结构,有一个用于 API 或 CMS 的部分:
tests/
src/
Cms/
Controllers/
Requests/
Api/
Controllers/
Transformers/
Models/
Module.php // contains some specifc calculations for example
Providers/
CmsServiceProvider.php // includes `ModuleServiceProvider`
ApiServiceProvider.php // includes `ModuleServiceProvider`
ModuleServiceProvider.php // contains global stuff like commands etc.
composer.json
我们根据客户/项目的意愿注册ApiServiceProvider 或CmsServiceProvider,而不是在config/app.php 中注册ModuleServiceProvider。