Laravel 5软件包开发:从哪里开始?

时间:2016-02-06 22:33:24

标签: php laravel laravel-5 packages

虽然创建了这个问题,Stackoverflow已经说过这是我要问的一个主观问题。但是,我认为这是许多首发(包)开发人员在某些时候问自己的问题。

我现在有几年的Laravel经验。而且我已经到了想要创建基于Laravel的的地步。我做了一些研究,你发现的大量信息已经陈旧,已经过时了。

关于这个问题,我只有几个问题:

  • 哪里是一个好的起点?我似乎无法找到我应该从哪里开始。我已经阅读了文档,说实话,我现在还在黑暗中。
  • 在创建包之前,是否建议首先将包创建为普通项目?
  • 应该在哪里开发包装?你的工作空间是什么?定期的Laravel项目?我读过workbench已经不在了吗?
  • 您是否遵循了一些推荐的教程并发现有用?

我衷心希望这个问题得到一些好的答案,因为目前的搜索结果不是他们应该的。当然不是像Laravel这样漂亮的框架。

1 个答案:

答案 0 :(得分:1)

需要知道的所有内容都应该是in the docs

除此之外:将包视为主要是Composer包。您不仅仅局限于Laravel软件包的开发路径,而且实际上是Composer,因为它是控制自动加载这些软件包的人。如果软件包恰好包括Service Providers,Facades,Blade视图等,那么它已成为Laravel集成的一个软件包。这与删除工作台的原因一致:拥有PHP wide solution

一个好的起点是现有的项目,理想情况下包含一组很好的用例。 至少在开发应用程序期间,它可以清楚地知道什么甚至应该分成包/库。 作为替代方案,创建一个新的laravel项目并围绕包构建明确定义的用例。

以下是开发软件包的一种可能方式(如上所述,它是一个主观问题),它允许项目中的两个""开发和作曲家稍后安装。

免责声明:我没有遵循任何教程,也没有专门搜索它们,因为Composer和Laravel的文档提供了所需的一切。我刚看了vendor文件夹中的其他Composer软件包,这让我相信它是一种有效的方法。以下解决方案甚至没有绑定到Laravel - 我在开发Zend Framework模块时使用相同的方法。

注意:如果要在包装上发布,请检查包的名称空间是否未在包装上发布。

设置文件夹结构,可以在项目根目录的libpackages文件夹中的其他编写器包中找到。

lib/
    my-namespace/
        my-package/
            config/
            src/
                Facades/
                    MyPackage.php
                Support/
                    helpers.php
                MyPackageServiceProvider.php
            ...

将软件包的src文件夹(以及要自动加载的其他文件)添加到laravel项目的composer.json自动加载配置中。 (有关可用选项,请参阅Composer's docs

"autoload": {
    "files": [
        "lib/my-namespace/my-package/src/Support/helpers.php"
    ],
    "psr-4": {
        "MyNamespace\\": "lib/my-namespace/my-package/src/"
    }
},

注意: my-namespace文件夹在其自己的存储库中受版本控制。因此,lib文件夹可以在项目级别被git忽略。

将文档添加服务提供商和外观添加到Laravel的应用配置中。

开发和使用文档中描述的包,并在其他Laravel包中看到。

每次应用程序忽略程序包/库中最近更改的内容时运行composer dumpautoload

如果要公开提供包裹(例如github / packagist),则应至少包含commonly expected software artefacts,并且最好遵循semantic versioning。在文件夹内容中粗略描述:

docs/
tests/
composer.json
LICENSE
readme.md

注意:我倾向于在开头的包/库的根目录中添加一个composer.json文件。它迫使我清楚地了解这个软件包提供和不提供的内容。

要发布包/将其从项目中移出相关的自动加载部件,从项目移动到库composer.json并调整路径。然后将项目发布到packagist /自己的Toran代理。 需要包含--prefer-source的包 - 这样就可以在使用时开发包,即使在多个不同的项目中也是如此。