• laravel5.5开发composer扩展包


    1. 下载laravel框架,并命名(framework)

    composer create-project --prefer-dist laravel/laravel framework "5.4.*"
    

    2. 创建相关目录

    app同级目录创建packages文件夹,然后依照下面目录层次创建文件夹,文件可以稍后创建
    目录层次如下:

    |
    |—— packages 
    |   |—— archerwong
    |       |—— larapackage  实际我们开发包的根目录
    |           |—— src
    |               |—— ArcherWong
    |                   |—— LaraPackage
    |                       |—— LaraPackage.php    定义facades
    |                       |—— LaraPackageProvider.php    定义服务提供者
    |                       |—— MoreAction.php      定义服务提供者提供的各种服务
    |               |—— Controllers
    |                   |——  IndexController.php  和下面的包路由配合,实现控制器--路由联动
    |               |—— views   视图文件夹
    |                   |——  message.blade.php 
    |                   |——  welcome.blade.php
    |               |—— routes.php  包路由
    |           |—— composer.json    
    

    3. 项目根目录下的composer.json文件中声明命名空间

    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\": "app/",
            "ArcherWong\LaraPackage\":"packages/archerwong/larapackage/src/"
        }
    },
    

    注意:重新生成autoload文件 ,命令:composer dump-autoload

    4. 在包的根目录(packages/archerwong/larapackage)下创建composer.json文件

    填入下面内容

    {
        "name": "archer-wong/larapackage",
        "description": "how to develop a laravel package",
        "license": "MIT",
        "authors": [
            {   
                "name": "archer-wong",
                "email": "wong_chiu@163.com"
            }   
        ],  
        "minimum-stability": "dev",
        "require": {
            "php": ">=5.6.4"
        },  
        "autoload": {
            "psr-0": {
                "ArcherWong\LaraPackage": "src/"
            }   
        }   
    }
    

    注意:根据自己的需要增加依赖等。。。

    5. 各种文件中的内容

    5.1 facades文件:LaraPackage.php,这样可以方便的访问IOC容器中注册的类。

    文件内容如下

    <?php
    namespace ArcherWongLaraPackage;
    use IlluminateSupportFacadesFacade;
    class LaraPackage extends Facade
    {
        public static function getFacadeAccessor()
        {   
            //return 的字符串会在相应的provider中使用
            return 'larapackage';
        }
    }
    

    5.2 定义服务提供者:在该文件夹下创建LaraPackageProvider.php

    内容如下

    <?php
    
    namespace ArcherWongLaraPackage;
    
    use IlluminateSupportServiceProvider;
    
    class LaraPackageProvider extends ServiceProvider
    {
        /** 
         * Bootstrap the application services.
         *
         * @return void
         */
        public function boot()
        {   
            //注册扩展包视图,并起个名字,方便我们调用该文件夹下的视图
            $this->loadViewsFrom(__DIR__.'/../../views','LaraPackageView');
            //注册扩展包路由,使用php artisan route:list 命令可以查看是否生效
            $this->loadRoutesFrom(__DIR__.'/../../routes.php');
            //可以将相应的资源(不仅限于views文件夹)发布到laravel项目的某个位置,下面将views文件夹放到了我们常用的视图文件夹下
            $this->publishes([       
                __DIR__.'/../../views'=>base_path('resources/views/vendor/lara-package'),
            ]);                      
        }                            
                                     
        /**                          
         * Register the application services.
         *                           
         * @return void              
         */                          
        public function register()   
        {                            
            //这里使用到了facades中的字符串
            $this->app->singleton('larapackage',function(){
                //我们可以通过facades的aliase访问下面的MoreAction
                //会在config的app.php文件中进行服务提供者和别名的注册
                return $this->app->make('ArcherWongLaraPackageMoreAction');
            });                      
        }                            
    }      
    

    5.3 创建MoreAction.php文件

    文件内容如下:

    <?php
    namespace ArcherWongLaraPackage;
    
    class MoreAction
    {
        public function getInfo()
        {   
            $user_ip = $_SERVER["REMOTE_ADDR"]; 
            $time = date('Y-m-d H:i:s');
            return ['user_ip' => $user_ip, 'time' => $time];
        }
    
    }
    

    注意:以下内容和上面有个分割,上面其实已经实现一个包最简单的功能,以上只是返回一个包含ip和时间的数组,开发您的脑洞,当然可以实现各种复杂功能。

    在控制器中:

    利用门面获得 LaraPackage::getInfo();
    返回包中的视图 return view('LaraPackageView::welcome',['data' => $data]);
    

    在视图中:

    @include('LaraPackageView::message')
    

    下面内容是为了演示laravel包开发中的控制器,路由,视图的开发。

    5.4 controller文件夹下创建IndexController.php

    <?php
    
    namespace ArcherWongLaraPackageControllers;
    
    use IlluminateRoutingController as BaseController;
    use IlluminateSupportFacadesView;
    use LaraPackage;
    
    class IndexController extends BaseController
    {
        public function index() {
    
            //$data = 'Hello World';
            $data = LaraPackage::getInfo();
            //可以直接使用创建的包里的视图,注意调用是两个冒号
            return view('LaraPackageView::welcome',['data' => $data]);
        }
    }
    

    5.5 视图文件

    1> welcome.blade.php文件

    <!doctype html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>Laravel</title>
        </head>
        <body>
            <!--可以直接引入视图中的其他文件-->
            @include('LaraPackageView::message')
            <div>
                您的ip地址是:{{ $data['user_ip'] }}
            </div>
            <div>
                当前时间是:{{ $data['time'] }}
            </div>
        </body>
    </html>
    

    2> message.blade.php 文件

    <div>
        <div>
            <div>学习laraval扩展包开发</div>
        </div>
    </div>
    

    5.6 routes.php

    <?php
        //包中路由配置文件
        Route::get('hello','ArcherWongLaraPackageControllersIndexController@index');
    

    $ vim welcome.blade.php

    6. 将包发布到github和packagist上

    1> 首先创建一个github项目
    拿到对应的仓库地址 :git@github.com:archer-wong/larapackage.git
    2> 然后进入packages/archerwong/larapackage文件夹下(也就是我们开发的包的根目录),将包内容上传到github

    git init
    git add .
    git commit -m "first commit"
    git remote add origin git@github.com:archer-wong/larapackage.git
    git push -u origin master
    

    3>去仓库的setting => Intergrations&services添加Packagist同步服务,


    此时需要你的packagist的账号信息,所以我们先进入https://packagist.org(使用github账号登录,免去麻烦),找到右上角的submit按钮,输入我们刚上传包的github仓库地址,进行check验证

    审核通过后,类似如下,记下包的packagist地址https://packagist.org/packages/archer-wong/larapackage

    然后继续我们的github和packagist的自动同步设置
    用户信息,请填写账号,不要写邮箱地址
    进入个人信息可以拿到token信息
    domain地址填写刚拿到的包packagist地址

    此时我们的版本是dev-master

    引入的方法是 composer require archer-wong/larapackage “dev-master" 不加版本会报错

    如果后期有人提出了一些issues你去修改了自己的package
    那么我们会去增加别的tag 也是就是说你修改package之后 再去添加一个tag:

    git tag -a 0.1.1 -m 'first version'
    

    填写说明信息后 推送这个tag:

    git push origin --tags
    

    参考资料

    https://segmentfault.com/a/1190000009069449

    https://d.laravel-china.org/docs/5.4/packages#public-assets

    https://d.laravel-china.org/docs/5.4/providers

    https://d.laravel-china.org/docs/5.4/facades

  • 相关阅读:
    vs编译出现 fatal error LNK1281:无法生成 SAFESEH 映像
    $apply()和$digest()——angular
    JS获取URL中参数值
    NeDB——node嵌入式数据库
    VS Code常用插件
    js断点调试
    VS Code 使用Git进行版本控制
    VS Code快捷键
    用户tokenId
    node-webkit-updater——NW.js自动更新
  • 原文地址:https://www.cnblogs.com/redirect/p/10066587.html
Copyright © 2020-2023  润新知