【问题标题】:Best practice to modular programming in Laravel 5+Laravel 5+ 中模块化编程的最佳实践
【发布时间】:2015-12-09 11:02:32
【问题描述】:

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

使用这个插件是真的吗?这个插件以后会更新吗? Embedd Package Laravelpingpong/modules 有什么不同?或者您有什么建议吗?

【问题讨论】:

    标签: laravel-5 package recommendation-engine modularity


    【解决方案1】:

    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
    

    我们根据客户/项目的意愿注册ApiServiceProviderCmsServiceProvider,而不是在config/app.php 中注册ModuleServiceProvider

    【讨论】:

    • 那么为什么不使用Laravel Pacakge呢?我认为即使Pingpong modules 在后端使用 Laravel 包并且值得信赖。
    • 这正是我在“如何建立自己?”中所解释的。是的,如果这就是你所说的“Laravel 包”,那么是的。您所说的“Laravel 包”链接只是一种在包中很好地创建路由并让您的包可以通过 Laravel 容器机制访问的方法。
    【解决方案2】:

    要重用您的课程,只需使用php namespacesuse 回调您的课程。

    使用命名空间

    namespace Acme\Tools;
    class Foo
    {
     echo "me";
    }
    

    你可以调用类foo

    <?php 
    
    $foo = new \Acme\Tools\Foo();
    

    使用使用

    您也可以使用use 声明如下:

    <?php
    use \Acme\Tools\Foo;
    $foo = new Foo();
    

    使用中间件 您还应该使用中间件来过滤谁应该使用脚本,即Auth中间件,这将帮助您过滤用户、注册、登录阅读更多http://laravel.com/docs/5.1/middleware

    使用 Eloquent 使用 ORM 为您的模型创建 REST api,它非常简单,始终让您的控制器类扩展 eloquent 使用 Illuminate\Database\Eloquent\Model; 即:

    use Illuminate\Database\Eloquent\Model;.阅读更多http://laravel.com/docs/5.1/eloquent

    最后使用 Laravel 内置的 Helper 函数 Laravel 内置了许多 Helper 函数,使用时只需翻阅文档即可帮助您

    【讨论】:

    • 你不明白我的问题。我对 laravel 中的软件包和pingpong/modules的工作经验的问题@
    【解决方案3】:

    我使用过 pingpong 模块。这是一个非常酷的包。我不确定它是否更新了很多。但这是一个非常简单的包。它唯一要做的就是创建一个与应用程序文件夹+视图具有几乎相同结构的文件夹。但这些是模块。如果您对它们进行正确编程,您可以重复使用它。 jimmy 的另一个答案也是如此,如果你有一个好的结构,你可以重用任何东西。

    编辑

    在下图中,您将看到一个 pingpong 模块的示例。就像您一样,它与 app 文件夹的结构几乎相同。也许更多的根文件夹。通常它运行 start.php 并且您在 Http 文件夹中有一个 routes.php 文件。我定制了我的一点。并在 RouteServiceProvider 中加载前端和后端路由。这是使用 laravel 5.1 构建的。

    【讨论】:

    • 它是package in Laravel 的基础?这意味着如果不更新,我们可以使用这个文件夹结构吗?我认为pingpong modules 开发了 php artisan 并制作了结构并且不会编程,是真的吗?
    • @Ehsan 我已经编辑了我的答案。希望现在更清楚一点
    • Embedd Package Laravel 和 pingpong/modules 有什么不同?你的意思是我们在 Laravel 中使用 embed 包
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2023-03-22
    • 1970-01-01
    • 2015-04-16
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多