【问题标题】:Laravel 5 package development: where to start? [closed]Laravel 5 包开发:从哪里开始? [关闭]
【发布时间】:2016-05-16 19:09:05
【问题描述】:

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

我现在有几年使用 Laravel 的经验。我已经到了想要创建一个基于 Laravel 的 package 的地步。我做了一些研究,发现大量信息已经过时了。

关于这个问题,我没有一个,而是几个问题:

  • 哪里是一个好的起点?我似乎找不到我应该从哪里开始。我已经阅读了文档,老实说,我在这里仍然一无所知。
  • 是否建议先将包创建为普通项目,然后再从中创建包?
  • 应该在哪里开发包?你的工作空间是什么?一个常规的 Laravel 项目?我读过workbenchis no more了?
  • 是否有一些推荐的教程让您学习并发现对您有帮助?

我真诚地希望这个问题能得到一些好的答案,因为当前的搜索结果不是它们应有的结果。当然不是像 Laravel 这样漂亮的框架。

【问题讨论】:

  • 您是否费心阅读文档? Laravel 文档有一个标题为exactly“包开发”的部分:laravel.com/docs/master/packages
  • 恕我直言,我并不愚蠢,我知道在哪里可以找到文档。 :) 感谢您非常有帮助的回答。
  • 我并没有说你笨,但是如果你知道在哪里可以找到文档,而你没有找到详细说明你正在寻找的内容的部分,那就奇怪了。
  • @MartinBean 因为这个问题现在被搁置,我的回答可能太长了:这个问题非常适合论坛和我的博客条目的回答。我在写答案时意识到了这一点。尽管如此,公平地说,Laravel 的文档并没有提到如何考虑 Laravel 包的设置,也没有提到实现这一点实际需要的 Composer 包开发。

标签: php laravel laravel-5 packages


【解决方案1】:

需要知道的一切都是in the docs,应该是。

除此之外:将包想象成主要是 Composer 包。您不仅在/仅限于 Laravel 包的开发路径,而且实际上是 Composer 的,因为它是控制自动加载这些包的人。如果包碰巧包含服务提供者、外观、刀片视图等,那么它就成为了一个与 Laravel 集成的包。这符合移除工作台的原因:拥有PHP wide solution

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

以下是开发包的一种可能方式(如 SO 所述,这是一个主观问题),允许“项目内”开发和作曲家稍后安装。

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

注意:如果您想在那里发布包,请检查包的命名空间是否未在 packagegist 上。

在项目根目录的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-ignored。

将服务提供者和外观添加到 Laravel 的应用配置中,如文档中所述。

按照文档中的描述和其他 Laravel 包中的说明开发和使用包。

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

如果一个包打算公开提供(例如 github/packagist),它应该至少包含commonly expected software artefacts,最好遵循semantic versioning。文件夹内容中粗略描述:

docs/
tests/
composer.json
LICENSE
readme.md

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多