Laravel 开发扩展简单教程

231 阅读1分钟

Step1. 初始化laravel项目

composer create-project laravel/laravel package-demo

Step2. 创建目录,初始化 composer.json

cd package-demo
➜  mkdir -p  package  
➜  cd package
➜  composer init
➜  mkdir src
➜  touch README.md
➜  cd src
➜  touch Lara.php LaraServiceProvider.php
#  xiaohai是用户名,表示谁的包
#  lara 为拓展包的包名

Step3. 实现拓展包的内容

Lara.php

<?php

namespace Xiaohai\Lara;

class Lara
{
    public function Test()
    {
        echo 'this is a test. ';
    }
}

LaraServiceProvider.php

<?php

namespace Xiaohai\Lara;

use Illuminate\Support\ServiceProvider;

class LaraServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('lara', function () {
            return new Lara();
        });
    }
}

composer.json

{
    "name": "xiaohai/lara",
    "description": "This is a test.",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "xiaohai",
            "email": "xiaohai@qq.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
        "psr-4": {
            "Xiaohai\\Lara\\": "src/"
        }
    },
    "version": "1.1"
}

Step4. 在 laravel 项目引入本地拓展包

  1. 编辑 laravel 项目文件的 composer.json

  2. .... ,
    "repositories": {
            "xiaohai": {
                "type": "path",
                "url": "/Users/xiaohai/Downloads/package-demo/package/xiaohai/lara/src"
            }
        }
    	# 注意 “url” 为绝对路径
    
  3. 安装拓展包

composer require xiaohai/lara:dev-master

安装完会发现 xiaohai/lara 出现在 laravel/vendor

此时编辑package/xiaohai/lara目录内的文件,laravel/vendor/xiaohai/lara

目录的文件会跟着改变,相当做了文件映射,这样方便本地调试

  1. 把service 注册到 laravel 项目中,在 config/app.php 添加
'providers' => [

      
        Xiaohai\Lara\LaraServiceProvider::class,
    ],

Step5. 测试

  1. 编辑 route/web.php
<?php

Route::get('/', function () {
    app('lara')->Test();
});

访问后会出现:

this is a test. 

代表功能测试正常


添加配置文件 config

  1. 在src下创建config 目录来存取我们的配置参数文件 config/lara.php
<?php
return [
    'key' => 'lara',
    'value' => 10
];
  1. 编辑LaraServiceProvider.php.
<?php

namespace Xiaohai\Lara;

use Illuminate\Support\ServiceProvider;

class LaraServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton('lara', function () {
            return new Lara();
        });
    }

    public function boot()
    {
        $this->publishes([
            __DIR__ . '/config/lara.php' => config_path('lara.php'),
        ]);
    }
}
  1. 发布配置文件 php artisan vendor:publish
  2. 编写 Lara.php
<?php

namespace Xiaohai\Lara;

class Lara
{

    public function Test()
    {
        echo 'This is a test..';
    }

    public function getConfig()
    {
        dd(config('lara'));
    }
}
  1. 测试 vim route/web.php
<?php

Route::get('/', function () {
    app('lara')->getConfig();
});


添加门面 Facade

  1. src目录下创建Facade.php
<?php

namespace Xiaohai\Lara;

use \Illuminate\Support\Facades\Facade as LaravelFacade;

class Facade extends LaravelFacade
{
    protected static function getFacadeAccessor()
    {
        return 'lara';
    }
}
  1. 在 app/config 目录注册Facade类
'aliases' => [
		....,
        'Lara' => Xiaohai\Lara\Facade::class
    ],
  1. 测试,vim route/web.php
<?php

Route::get('/', function () {
    Lara::Test();
});

发布拓展包到 packagist.org

1. 首选把 package包 上传到 github

cd package/xiaohai/lara 
➜  git init
➜  git add .
➜  git commit -m 'init package'
➜  git remote add origin https://github.com/codingwa/package-demo.git
➜  git push -u origin master
➜  git tag 1.0
➜  git push --tag

vim package/xiaohai/lara /composer.json ,添加 "version"

{
	...
    "version": "1.0",
}

2. 上传到 packagist.org/

  1. 点击右上角的submit
  2. 把 github 上https的链接cv后 check
  3. 成功后,出现下图 以后更新拓展包,把本地新代码提交到github后,点击图上的 update同步最新的代码

3. 测试

先删除本地的包

  1. 删除 composer.json 的 "repositories"、"require" 的 "xiaohai/lara": "dev-master",
  2. 注释掉 config/app.php 内刚刚添加的providers和aliases
  3. 执行 composer update

安装

composer clear-cache 
composer require "xiaohai/lara"

这样扩展包就可以正常到本地使用了,如果Git有更新 可以重新composer update 即可