ribafs/hello-world-package-laravel

Laravel 9的创建包的演示小包

1.2 2023-01-06 14:40 UTC

This package is auto-updated.

Last update: 2024-09-16 02:04:47 UTC


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

https://packagist.org.cn

并发布并启用了自动更新。

现在我将创建该仓库的第一个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的创建,我编写了一个教程并把它放在了仓库中。

因此,我们既可以创建自己的包,也可以创建优秀项目的分支并进行定制,包括翻译、改进文档、纠正一些错误等。