Laravel 创建包和制作包使用

laravel 包制作

包制作发,方便我们把轮子制作好之后,打包出来,多个项目公用。

包制作流程

  • 创建一个包存放目录
  • 创建包的要实现的主类
  • 创建门面类
  • 创建提供者类
  • 创建辅助文件:配置文件,数据库迁移文件,路由文件,资源文件,视图文件等。
  • 包引入发现
  • 发布到 https://packagist.org/

如果一个简单的类制作包,只需要4个步骤

  • 创建一个包存放目录
  • 创建包的要实现的主类
  • 创建提供者类
  • 包引入发现

创建一个包存放目录

例如我们创建包的路径在根目录下/packages/ 。
这个时候我们需要想个名字,比如我这个叫 Hello 包,那么我需要包前面加个作者的包名称,那么可以是kongqi/hello/.所以我们建立一个文件夹
/packages/kongqi/hello/src/
黑白课堂

创建包的要实现的主类

src下创建 Hello.php

<?php

namespace  Kongqi\Hello;

use Illuminate\Config\Repository;

class Hello
{
    protected $config;
    public function __construct(Repository $config)
    {
        $this->config=$config->get('hello');
    }
    public function toSay(){
        return 'hello Test';
    }
}

创建提供者类

提供者一般用于我们注册包时所需要的环境,差不多就是要告诉系统,我这个包需要那些辅助来帮我完成。我们先建一个文件packages/kongqi/hello/src/HelloProvider.php

<?php

namespace Kongqi\Hello;

use Illuminate\Support\ServiceProvider;

class HelloProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {

    }
    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {

    }
}

假设包我需要一个配置文件,我们 boot 里面执行操作

   public function boot()
    {
        // 发布配置文件
        $this->publishes([
            __DIR__.'/config/hello.php' => config_path('hello.php'),
        ],'config');
    }

其中 config 是一个组名称,也就是 tag 标签这样子
黑白课堂

扩展包默认配置合并一起,写在 register

 $this->mergeConfigFrom(
      __DIR__.'/config/hello.php', 'config'
    );

假设包我需要一个数据库迁移

  public function boot()
    {

        $this->loadMigrationsFrom(__DIR__ . '/database/migrations');

        //发布迁移文件
         $this->publishes([
            __DIR__.'database/migrations/' => database_path('migrations')
        ], 'migrations');

    }

路径存在于 packages/kongqi/hello/src/database/migrations/ 下,正常写迁移文件即可

假设包我需要注册路由

 public function boot()
    {
         $this->loadRoutesFrom(__DIR__ . '/routes/api.php');
    }

路径存在于 packages/kongqi/hello/src/routes/api.php 下,正常写路由文件即可

视图

public function boot()
{
    $this->loadViewsFrom(__DIR__.'/views', 'hello');
}

//发布视图

 $this->publishes([
        __DIR__.'/views' => resource_path('views/vendor/hello'),
    ]);

其中 hello 是包名的名称

语言包

public function boot()
{
    $this->loadTranslationsFrom(__DIR__.'/lang', 'hello');

    //发布语言包,发布其实就是迁移路径
    $this->publishes([
        __DIR__.'/lang' => resource_path('lang/vendor/hello'),
    ]);

}

其中 hello 是包名的名称
调用

echo trans('hello::messages.welcome');

公共资源文件

public function boot()
{
    $this->publishes([
        __DIR__.'/assets' => public_path('vendor/hello'),
    ], 'public');
}

创建门面

packages/kongqi/hello/src/Facades/Hello.php 创建

<?php
namespace  Kongqi\Hello\Facades;

use Illuminate\Support\Facades\Facade;

class Hello extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'hello';
    }
}

以上是构建类所需要的一些方法

如果我们里面还需要辅助函数

可以创建一个 helpers.php即可,最后我们需要在 composer.json 里面引入它即可

注册包到app.php里面

    'providers' => [
    ...
     Kongqi\Hello\HelloProvider::class,
    ],
    'aliases'=>[
    ...
      'Hello'=>\Kongqi\Hello\Facades\Hello::class
    ]

执行相关迁移文件

php artisan vendor:publish

黑白课堂
执行选择即可完成。

创建composer文件

黑白课堂
路径在包下面

{
    "name": "kongqi/hello",
    "description": "包学习制作",
    "license": "MIT",
    "authors": [
        {
            "name": "kongqi",
            "email": "531833998@qq.com"
        }
    ],
    "autoload": {
      "psr-4": {
        "Kongqi\\Hello\\": "src"
      }
    },
    "require": {}
}

如果刚才我们还引入了helpers.php文件,需要改成如下

{
    "name": "kongqi/hello",
    "description": "包学习制作",
    "license": "MIT",
    "authors": [
        {
            "name": "kongqi",
            "email": "531833998@qq.com"
        }
    ],
    "autoload": {
      "psr-4": {
        "Kongqi\\Hello\\": "src"
      },
      "files": [
        "src/helpers.php"
      ]
    },
    "require": {},
    "extra": {
        "laravel": {
            "providers": [
                "Kongqi\Hello\HelloProvider"
            ],
            "aliases": {
                "Hello": "Kongqi\Hello\Facades\Hello"
            }
        }
    }
}

这样我们就完成包的整个制作了,后面就是上传包到 https://packagist.org/ 里面了。这个操作不再累赘。

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。

相关帖子

黑白课堂

如果你在.env文件下配置了变量参数,在路由缓存下会无效

| 最后更新 2020-12-11 03:05:43
1601 0
黑白课堂

laravel之Artisan命令操作,以及自己编写Artisan Console命令

| 最后更新 2021-01-13 14:24:58
1420 0
黑白课堂

JWT(JSON Web Token)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名

| 最后更新 2021-01-13 14:25:29
1539 0
黑白课堂

扩展一个指令在blade模板中使用。

| 最后更新 2020-12-11 03:04:51
1150 0
黑白课堂

所有Laravel应用启动的中心,所有Laravel的核心服务都是通过服务提供者启动,服务提供者是应用配置的中心. >这里需要了解下IOC(控制反转)也叫依赖注入

| 最后更新 2021-01-11 03:14:14
1050 0
黑白课堂

控制对资源的访问权限,这个权限不同于RBAC(角色的权限访问控制),比如,只能操作自己的信息,可以说是拟补RBAC的更加细腻的权限。

| 最后更新 2021-01-13 14:24:00
1076 0
黑白课堂

黑白课堂 · 技术专家

专业PHP开发

年度VIP 站长创业者玉树凌风每天醒来0收入
查看更多

最新视频课程

钻级赞助商