构建 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 目录中创建一个服务提供者。然后,我将其移动到我的包中并相应地更新命名空间。
在此阶段,我将注册路由、配置、视图和翻译,而无需详细说明所有细节。我发现这样做可以加快以后的开发速度。
测试
没有测试的优秀包是不完整的。
在包中设置测试可能非常棘手;主要是在您想要访问 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"
这几乎涵盖了包的脚手架。下次,我们将开始构建一些包功能,从构建基于文件的翻译驱动程序开始。