ribafs / hello-world-package-laravel
Laravel 9的创建包的演示小包
Requires
- php: ^7.4|^8.0
README
让我们看看如何创建、在Packagist.org上发布以及在一个Laravel应用中安装和发布包。
包/packages
Laravel中的包可以扩展应用的功能而不修改原有代码。通过包,我们可以添加一个简单的包到现有应用中,包含模型、控制器、迁移、路由等。这里我展示了一个包含一个小命令和信息的简单包,但可以用于创建更有用的东西。最后我会给出一些更有用的包的建议。
祝您阅读愉快
https://ashallendesign.co.uk/blog/8-essential-questions-to-ask-before-using-a-laravel-package
场景/计划
我们将创建一个小包,它基本上包含一个命令,当执行时会显示“Hello World”消息。
项目URL
https://github.com/ribafs/hello-world-package-laravel
创建
这里我提供两种创建包的方法
- 从头开始。为了这个目的,请查看Inspire示例
- 使用在线生成器
我将使用生成器,它提供了基本结构
创建基本结构
为此,我访问了
https://laravelpackageboilerplate.com/
滚动页面并填写所需包的数据
它默认选中了Laravel包。
填写表单。根据您的数据调整
Vendor Name - ribafs
Package Name - hello-world
Author Name - Ribamar FS
Author E-Mail - ribafs@gmail.com
Package Description - Pequeno pacote para a criação de pacotes para o Laravel 9
然后点击“Download my package”并保存包。
因此,它为我生成了一个Laravel包的基本结构,包括
composer.json
src/ViewMaker.php
src/ViewMakerFacade.php
src/ViewMakerServiceProvider.php
README.md
E outros
然后解压缩到某个文件夹中。
自定义基本结构
创建helloWorld命令
cd packagesLaravel
php artisan make:command helloWorld
它将被创建在
app/Console/Commands
nano helloWorld.php
编辑并保持如下
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class helloWorld extends Command { protected $signature = 'hello:world'; protected $description = 'Pequeno comando para demonstração sobre a criação de comandos no laravel 9'; public function handle() { return $this->info(PHP_EOL.'Olá Mundo dos pacotes no Laravel 9 '.PHP_EOL); } }
执行由包创建的命令
php artisan hello:world
现在我们将把这个小命令添加到我们的包中
创建文件夹
src/Commands
然后复制
app/Console/Commands/helloWorld.php para a pasta src/Commands do pacote
将命令添加到Service Provider
编辑hello-world包
src/HelloWorldServiceProvider.php
boot()方法
public function boot() { ... // Publishing the command. $this->publishes([ __DIR__.'/Commands' => app_path('Console/Commands'), ], 'commands'); ...
这将使得安装此包后,在发布时会将helloWorld命令从包的文件夹复制到应用的相应文件夹。
关于Service Provider
请注意,ServiceProvider是Laravel包的主要部分。在我们的例子中,当使用生成器创建包时,我们收到了一些已注释的代码,其中在boot()方法中我们可以将包的文件复制到应用中。只需取消注释注释的代码并调整即可,就像我这样做的一样。
在Packagist.org上发布我们的包
- 压缩composer.json
我移除了require-dev并保持如下
...
],
"require": {
"php": "^7.4|^8.0"
},
...
- 托管在Github上
我调整了composer.json以使其更一致
"name": "ribafs/hello-world-package-laravel",
并在Github上托管在
https://github.com/ribafs/hello-world-package-laravel
我访问了Packagist.org
并发布并启用了自动更新。
现在我将创建该仓库的第一个release以方便用户通过composer安装。
我创建了1.0版本
本地安装包
创建了一个Laravel应用后,访问其文件夹并执行
composer require ribafs/hello-world-package-laravel
发布
php artisan vendor:publish --provider="Ribafs\HelloWorld\HelloWorldServiceProvider"
查看消息
Copying file [vendor/ribafs/hello-world-package-laravel/config/config.php] to [config/hello-world.php]
Copying directory [vendor/ribafs/hello-world-package-laravel/src/Commands] to [app/Console/Commands]
请注意,现在我们有一个新的命令
app/Console/Commands/HelloWorld.php
我们可以用
php artisan hello:world
注意
当然,我们不会为了展示这个消息而进行所有这些工作。我们的目标是创建一个小包,并在此基础上创建更有用的东西。
创建第三方包的分支并自定义
Laravel 9 ACL - https://github.com/ribafs/laravel-acl
Laravel 9 CRUDs和API生成器 - https://github.com/ribafs/crud-generator-appzcoder
这两个项目不是我创建的。我非常喜欢这两个项目,所以我创建了它们的分支,并根据自己的方式进行了定制。
第一个项目实现了Laravel 9应用中的ACL。
第二个项目以非常简单的方式为Laravel 9应用创建CRUD。它还创建了API。由于原始项目没有详细说明API的创建,我编写了一个教程并把它放在了仓库中。
因此,我们既可以创建自己的包,也可以创建优秀项目的分支并进行定制,包括翻译、改进文档、纠正一些错误等。