Laravel 5+中模块化编程的最佳实践

5 modularity recommendation-engine package laravel-5

我正在开始一个新项目,我想重用它的一些部分,主要是与用户注册和身份验证相关的东西.我可以复制并粘贴所有代码,但我想再次使用.我知道Package DevelopmentLaravel 有,但这并不容易,并且觉得必须有更好的方法.几天前我发现了一个,pingpong/modules但我不知道.它是第三方插件,不相信它.

使用这个插件是真的吗?这个插件会在以后更新吗?Embedd Package Laravel和之间有什么不同pingpong/modules?或者你有什么建议吗?

Yor*_*gen 3

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,我们可以非常简单地创建整个系统并使用和扩展/覆盖模块。即使是模块中的小部分也可以被覆盖以满足项目的特定需求。

app/对于 CMS/API 模块,我们选择了与 Laravel 项目的文件夹几乎相同的结构。

一个包看起来像:

tests/
src/
    Acme/
        Controllers/
        Requests/
    Models/
        Module.php // contains some specifc calculations for example
    ModelServiceProvider.php
composer.json
Run Code Online (Sandbox Code Playgroud)

composer.json文件中我们自动加载:"Module\\": "src/" 并且在config/app.php我们注册ModuleServiceProvider. 现在我们将功能注入到 Laravel 的容器中,我们可以通过app()实例使用它吗?

但是每当我们只想Models在另一个项目或独立项目中使用 with 时,我们仍然可以使用它,因为自动加载的功能composer以及我们构建包的方式。可以使用:

<?php 

    require_once __DIR__ .'/vendor/autoload.php';

    use Module\Models\Module;

    $module = new Module;
Run Code Online (Sandbox Code Playgroud)

编辑

我们喜欢使用的包结构,有一个用于 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
Run Code Online (Sandbox Code Playgroud)

我们不注册,而是ModuleServiceProvider根据客户/项目的意愿config/app.php注册ApiServiceProvider或。CmsServiceProvider