一步步带你开发 Laravel 5.5 扩展包(实战教程)

IV.Clement 发布于3月前 阅读108次
0 条评论

一步步带你开发 Laravel 5.5 扩展包(实战教程)

 

Laravel 主要通过扩张包增加功能。在这篇文章中,依据 Getting Started with Laravel 5.4 and MongoDB 指导创建了 MongoDB composer package 。我推荐在 Laravel 5.5中使用 package auto-discovery feature

首先,我们来了解下扩展包在Packagist 发布之后该怎么在 Laravel 项目中使用。

已发布的扩展包的使用教程

如果没有安装MongoDB,请先安装。接着创建一个新的 Laravel 项目。

composer create-project laravel/laravel myproject dev-develop\
cd myproject

在 Laravel 5.5版本最终发布之后,你可以使用 laravel new myproject 安装。现在请使用当前的开发分支(dev-develop)。

增加 composer 扩展包 markustripp/mongo :

composer require markustripp/mongo

从扩展包中复制配置文件到你的项目中(可选):

php artisan vendor:publish

请选择服务提供者: Markustripp\Mongo\MongoServiceProvider

现在你已经准备好使用 Mongo facade。编辑 routes/web.php (仅仅为了测试):

<?php
Route::get('mongo', function(Request $request) {
    $collection = Mongo::get()->mydatabase->mycollection;
    return $collection->find()->toArray();
});
Route::get('/', function () {
    return view('welcome');
});

打开命令行,连接 MongoDB ,创建一个数据库和集合,同时插入一个文档。

mongo
> use mydatabase
> db.mycollection.insert( { "hello": "world" } )

如果你使用Valet ,那么 http:// myproject.dev/mongo 仅返回你添加的 json 文档。

现在知道怎么使用扩展包了吧,让我们从头开始创建这个包。

创建新包

一个包通常由两部分组成:包项目和测试项目. 我个人的建议是将两个项目独立开,当然对于团队共同开发的包,则需要在包项目相同的目录下创建一个公共的目录

例如:单一的目录结构

./package-1
./package-2
./package-3
./project-1
./project-2

例如:包项目与测试目录相对应

./packages/package-1
./packages/package-2
./packages/package-3
./projects/project-1
./projects/project-2

在这个示例中,我将会使用单一的目录结构,并且将包项目命名 projects

创建包目录

原本打算将包命名为 markustripp/mongo (但是github上已经有相同包名称 Github repository ). 因此将会以 "mongo"作为包的命名

mkdir mongo

创建 Composer 文件

composer 配置文件描述包并且列出所有的依赖关系,composer init 命令会帮助你创建这个文件。

cd mongo
composer init

 

一步步带你开发 Laravel 5.5 扩展包(实战教程)

 

composer init for markustripp/mongo project

现在我们创建了基本的 composer 配置文件,就让我们使用 PSR-4 自动加载命名空间映射。

"autoload": {
    "psr-4": {
        "Markustripp\\Mongo\\": "src/"
    }
},

Laravel 5.5 介绍了包自动加载特性 就让我们为 MongoServiceProvider 和 mongofacade 添加配置:

"extra": {
    "laravel": {
        "providers": [
            "Markustripp\\Mongo\\MongoServiceProvider"
        ],
        "aliases": {
            "Mongo": "Markustripp\\Mongo\\MongoFacade"
        }
    }
}

这里是最终的 composer.json 文件:

{
    "name": "markustripp/mongo",
    "description": "MongoDB driver, auth, passport for Laravel",
    "license": "MIT",
    "authors": [
        {
            "name": "Markus Tripp",
            "email": "markus@mext.at"
        }
    ],
    "require": {
        "mongodb/mongodb": "^1.1"
    },
    "autoload": {
        "psr-4": {
            "Markustripp\\Mongo\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Markustripp\\Mongo\\MongoServiceProvider"
            ],
            "aliases": {
                "Mongo": "Markustripp\\Mongo\\MongoFacade"
            }
        }
    }
}

包的实现

参阅 Github 中关于包的实现。

 

一步步带你开发 Laravel 5.5 扩展包(实战教程)

 

以上是 Atom 编辑器中包的实现代码

创建一个使用包的应用

创建一个新的 Laravel5.5 应用程序:

composer create-project laravel/laravel mongo-app dev-develop
cd mongo-app

如果你使用Valet ,请在浏览器中打开 http:// mongo-app.dev/ ,并确保应用已经安装成功。

用你最喜欢的编辑器打开 mongo-app/composer.json ,并将该包路径添加到 repositories ,如下所示:

"repositories": [
    {
        "type": "path",
        "url": "../mongo",
        "options": {
            "symlink": true
        }
    }
],
"require": {
    "php": ">=7.0.0",
    "fideloper/proxy": "~3.3",
    "laravel/framework": "5.5.*",
    "laravel/tinker": "~1.0",
    "markustripp/mongo": "dev-master"
},

最后执行 composer update.

composer update

在控制台的输出中,你可以看到 composer 已经安装了 mongodb/mongodb 的依赖项,并在 ../mongo 中添加了符号链接。

Package operations: 2 installs, 0 updates, 0 removals
  - Installing mongodb/mongodb (1.1.2): Loading from cache
  - Installing markustripp/mongo (dev-master): Symlinking from ../mongo
Writing lock file

现在你已经准备好使用 Mongo facade 了。为了测试,只需修改 routes/web.php:

<?php
Route::get('mongo', function(Request $request) {
    $collection = Mongo::get()->mydatabase->mycollection;
    return $collection->find()->toArray();
});
Route::get('/', function () {
    return view('welcome');
});

如果你将文档添加到 mydatabase 的 mycollection 中,则可以通过 http://mongo-app.dev/mongo 在浏览器中访问文档。

现在程序已经完成了,你可以开始在 Laravel 或者其他项目中使用你的包了。

最后想说的

我在最近的项目中使用了Laravel passport 认证授权,应用中使用了2种数据库 (MySQL 和 MongoDB). 不是很完美,但是也可以了,毕竟时间有限。

后来我看了一篇关于包自动发现的文章。我想在自己的包里试试,我计划先简单支持MongoDB (版本 1.0.x), 还有认证 (版本 1.1.x) 最后实现授权,看看我的计划能不能实现。

 

讨论请前往: 一步步带你开发 Laravel 5.5 扩展包(实战教程)

查看原文: 一步步带你开发 Laravel 5.5 扩展包(实战教程)

  • lazydog
  • whiteladybug
  • goldenelephant
  • beautifulmouse
  • ticklishladybug
  • 小程故事
  • 小程故事
  • 小程故事
需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。