欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

开发 Laravel 扩展的基本流程

程序员文章站 2022-03-21 17:31:49
创建一个空的laravel项目 composer create-project --prefer-dist laravel/laravel pkg 在新建的 laravel 项目中建立如下目录 qiangzhiwang\testpkg\src,packages 目录和 app 目录同级。我们开发包的 ......

创建一个空的laravel项目

composer create-project --prefer-dist laravel/laravel pkg

 

在新建的 laravel 项目中建立如下目录 qiangzhiwang\testpkg\src,packages 目录和 app 目录同级。我们开发包的代码都放在这个 src 目录中,qiangzhiwang和 testpkg完全自定义。
mkdir -p packages/qiangzhiwang/testpkg/src

 

修改项目composer.json设定 psr-4 命名空间

"psr-4": {
    "app\\": "app/",
    "qiangzhiwang\\testpkg\\" : "packages/qiangzhiwang/testpkg/src"
},

 

进入命令行执行composer dump-autoload将autoload重新生成一次

composer dump-autoload

 

在qiangzhiwang/testpkg/src目录下书写一个简单的md5hasher类

<?phpnamespace qiangzhiwang\testpkg;/**
 * class md5hasher
 * @package qiangzhiwang\testpkg
 */class md5hasher{
    /**
     * @param $value
     * @param array $options
     * @return string
     */
    public function make($value, array $options =[])
    {
        $salt = isset($options['salt']) ? $options['salt'] :"";
        return hash('md5',$value . $salt);
    }
    /**
     * @param $value
     * @param $hashvalue
     * @param array $options
     * @return bool
     */
    public function check($value , $hashvalue , array $options=[])
    {
        $salt = isset($options['salt']) ? $options['salt'] :"";
        return hash('md5',$value . $salt) === $hashvalue;
    }
}

 

接下来就是怎么把这个类融入到laravel容器中

php artisan make:provider md5hasherprovider

 

执行完以上命令后,会在app/providers目录下生成md5hasherprovider.php将此文件移动到packages/qiangzhiwang/testpkg/src目录下

mv app/providers/md5hasherprovider.php packages/qiangzhiwang/testpkg/src/md5hasherprovider.php

 

移动完成之后,要进行简单的修改以及完成容器注册

<?php
namespace qiangzhiwang\testpkg;
use illuminate\support\serviceprovider;
class md5hasherprovider extends serviceprovider{
    /**
     * register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
        $this->app->singleton("md5hash",function (){
            return new md5hasher();
        });
    }
}

 

在config/app.php文件中,providers数组中最后一行添加上

'providers' => [

    /*
    * application service providers...
    */
       .......
    \qiangzhiwang\testpkg\md5hasher::class
],

 

测试使用

php artisan tinker
>>> app("md5hash")->make("123456")
=> "e10adc3949ba59abbe56e057f20f883e"

 

发布包提供给其他开发者下载,需要进入packages/qiangzhiwang/testpkg进行操作

composer init

然后通过git工具发布到github上,并同步https://packagist.org上,方可进行composer进行安装使用