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

时间:2015-12-09 11:02:33

标签: laravel-5 package recommendation-engine modularity

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

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

3 个答案:

答案 0 :(得分:3)

Pingpong modules似乎是为早期版本的Laravel 5构建的,以及它们与未来版本(可能是当前的5.1.11)的兼容程度,我不能说。

从最近的提交超过6个月之前的今天(18月12日)开始,看看2.1的提交历史并没有多少活动。

但是专为Laravel设计的包装?好像。它们提供了许多对开发有用的功能。唯一不幸的是你在自己的git环境中得到了很多代码(这是件好事吗?我不知道,你更喜欢什么)。

就我个人而言,我不喜欢以这种方式进行开发,我更喜欢它们在vendor /文件夹中,否则将它更新到更新的版本会很痛苦。

由于Laravel 5 Taylor想要使包开发不再具体,就像在Laravel 4中一样。使用Laravel制作包的唯一方法就是使用{{ServiceProvider来做(但不是必须) 1}}'第ServiceProvider是Laravel应用程序的引导程序。

如果你想扩展或实现你自己的功能,请分叉回购并自己构建它并托管它(通过github / packagist或使用Satis的私人仓库)。

Pingraong模块(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

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

答案 1 :(得分:1)

要重复使用您的课程,只需使用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,它非常简单,总是让您的控制器类扩展使用Illuminate\Database\Eloquent\Model;,即:

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

最后使用Laravel In内置帮助程序功能 有许多Laravel In内置的Helper功能,只需查看文档即可帮助您

答案 2 :(得分:0)

我使用过乒乓模块。这是一个非常酷的包。我不确定它是否更新了。但这是一个非常简单的包。它唯一能做的就是创建一个文件夹,其结构与app文件夹+视图几乎相同。但这些都是模块。如果您正确编程,则可以重复使用它。如果你有一个好的结构可以重复使用任何东西,那么jimmy的另一个答案也是如此。

修改

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

enter image description here