构建 Laravel 翻译包 - 脚手架
发布日期:作者: Joe Dixon
在 第 1 部分 中,我们介绍了本系列将涵盖为 Laravel 构建和维护开源包的过程。请查看本系列的概述。接下来,我们将开始为一个新的 Laravel 包创建脚手架。
为包创建脚手架
创建任何类型的 PHP 包时,您需要做的第一件事是设置存储库,最重要的是 composer 文件。Composer 包的组织没有事实上的标准方法;但是,我将带您了解我的方法。
我倾向于从使用 安装程序安装一个新的 Laravel 版本开始。使用一个测试 Laravel 安装可以为我提供一个全新且完善的测试环境。
在我的新安装的 Laravel 项目的根目录中,我创建了一个名为 packages
的目录。在这个目录中,我为我的包创建了一个目录结构,该结构与代码最终将驻留的 GitHub 存储库相一致 - 在这种情况下,joedixon/laravel-translation
。
在包目录中,我运行 git init
来设置版本控制。接下来,我运行 composer init
并按照说明进行操作,这些说明将为我创建 composer.json
文件,用于管理我可能需要的任何依赖项,并用于以后提交到 Packagist。
接下来,我在包的根目录中创建一个 src
目录,它将包含包的所有领域特定逻辑。
在 composer.json
文件中,我添加了以下 PSR-4 配置,以告知 Composer 如何自动加载我的包命名空间。
"autoload": { "psr-4": { "JoeDixon\\Translation\\": "src" }},
最后,在我编写任何代码之前,我会修改 Laravel 应用程序根目录中的 composer.json
文件,以告知它如何加载我的应用程序。
"require": { … "joedixon/laravel-translation": "dev-master"},"repositories": [ { "type": "path", "url": "./packages/joedixon/laravel-translation", "options": { "symlink": true } }]
希望 require
部分对您来说很熟悉。但是,repositories
部分可能不熟悉。
repositories
部分告诉 Composer 从本地安装中符号链接包。使用这种方法,我们可以在本地开发和测试包,而无需在每次更改时都 composer update
。
使用本地文件路径方法时,需要注意的是,包可以在您的机器上的任何位置;但是,我喜欢将它保留在应用程序结构中以进行开发。
现在包已经引导并且自动加载已配置,我们可以开始编写一些代码了。
包结构
在构建包时,我尝试尽可能地镜像 Laravel 应用程序结构。因此,通常在我的 app
目录中找到的所有内容,例如控制器、控制台命令、事件监听器等,都会进入我的包 src
目录,而诸如路由和资源之类的内容则位于包的根目录。
服务提供者
为了让 Laravel 开始使用包,我们需要构建一个 服务提供者。服务提供者类是我们将引导包的地方,通过执行诸如将服务绑定到容器、注册路由、发布配置以及您可以想象的几乎所有需要绑定到 Laravel 应用程序中的操作!
提示 通常,我会运行 php artisan make:provider TranslationServiceProvider
,这将在 Laravel 应用程序的 Providers 目录中创建一个服务提供者。然后,我将其移至我的包并将命名空间相应地更新。
在此阶段,我将注册诸如路由、配置、视图和翻译之类的内容,而无需 necesariamente 详细说明所有细节。我发现用这种方式去做,在开发的后期阶段可以使速度更快。
测试
任何好的包都离不开测试。
在包中设置测试可能相当棘手;主要是在您想要能够访问 Laravel 的测试助手时。幸运的是,orchestra/testbench
包使您能够在包的测试中使用 Laravel 的所有原生测试助手。
运行 composer require --dev orchestra/testbench
将其安装为开发依赖项。运行 Composer 应该会在 composer.json
文件中提供以下配置
"require-dev": { "orchestra/testbench": "~3.0"}
在我们完成之前,让我们将我们拥有的内容提交到 master
分支
# within ./packages/joedixon/laravel-translationecho "vendor/" >> .gitignoregit add .git commit -m"Initial Commit"
这几乎涵盖了包的脚手架。下次,我们将开始构建一些包功能,从构建基于文件的翻译驱动程序开始。