3. laravel 5.5 多子域名 + dingo + jwt 简单环境搭建
环境介绍
laravel 5.5.* + php 7.2 + mysql 5.7.27
1. 创建 laravel 项目 (自行 配置一下域名 如果 不会 请参考laravel 的第一篇文章)
composer create-project --prefer-dist laravel/laravel=5.5.* laravel-dj

2. 引入 dingo 并 进行 部分 配置 (dingo 文档)
更改 compose.json 的 require 文件
"require": {
"php": ">=7.0.0",
"dingo/api": "2.1.0",
"fideloper/proxy": "~3.3",
"laravel/framework": "5.5.*",
"laravel/tinker": "~1.0"
}
使用 compose update 进行更新
composer update
发布 dingo
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
添加 部分配置到 .env 文件
API_PREFIX=/
API_STANDARDS_TREE=vnd
API_SUBTYPE=dj
API_VERSION=v1
API_NAME="dj API"
API_CONDITIONAL_REQUEST=false
API_STRICT=false
API_DEFAULT_FORMAT=json
API_DEBUG=true
3. 配置 先后台 接口分离 (例如 laravel-dj.com/admin 和 laravel-dj.com/front )
# 如果想配置 node1.larave-dj.com 和 node2.laravel-dj.com 接口访问 请参考 多域名使用
修改 RouteServiceProvider 的 map function
public function map()
{
// $this->mapApiRoutes();
$this->mapFrontApiRoutes();
$this->mapAdminApiRoutes();
$this->mapWebRoutes();
}
添加 mapFrontApiRoutes 方法 和 mapAdminApiRoutes
protected function mapFrontApiRoutes()
{
app('Dingo\Api\Routing\Router')->group([
'version' => 'v1',
'prefix' => 'front',
'middleware' => 'api',
'namespace' => 'App\Http\Controllers\Api\Front',
], function ($api) {
require base_path('routes/api/front.php');
});
}
protected function mapAdminApiRoutes()
{
app('Dingo\Api\Routing\Router')->group([
'version' => 'v1',
'prefix' => 'admin',
'middleware' => 'api',
'namespace' => 'App\Http\Controllers\Api\Admin',
], function ($api) {
require base_path('routes/api/admin.php');
});
}
根据 配置文件 创建 Admin 下的 UserController 和 Front 下的 UserController 以及 路由文件 routes/api/front.php 和 routes/api/admin.php
php artisan make:controller Api/Admin/UserController --resource
php artisan make:controller Api/Front/UserController --resource
并在 Api\Admin\UserController show 方法 内写入 dd('admin' . $id);
Api\Front\UserController show 方法 内写入 dd('front' . $id);
在 routes 下创建 api 文件夹
创建 front.php 和 admin.php 并进行 部分 路由写入
#front.php
<?php
$api = app('Dingo\Api\Routing\Router');
$api->group([],
function ($api) {
$api->get('/', function(){ return 'this is front';});
$api->get('users/{id}', 'UserController@show');
}
);
#admin.php
<?php
$api = app('Dingo\Api\Routing\Router');
$api->group([],
function ($api) {
$api->get('/', function(){ return 'this is admin';});
$api->get('users/{id}', 'UserController@show');
}
);
访问 laravel-dj.com/admin 和 laravel-dj.com/front


访问 laravel-dj.com/admin/users/1 和 laravel-dj.com/front/users/1


4. 使用 transfromer 格式化 接口数据 ( transform文档 )
migrate 一下 laravel 自带的 user 表 (需要配置一下 .env 和 mysql )
php artisan migrate
手动写入 3 条 数据 到 user 表

admin 的 UserController 下 引入 dingo 的 Helpers

在 app 下 创建 Transformers 文件夹, Transformers下创建 Admin 文件夹 并 编写 UserTransform.php
#UserTransform.php
<?php
namespace App\Transformers\Admin;
use App\User;
use League\Fractal\TransformerAbstract;
class UserTransform extends TransformerAbstract
{
public function transform(User $user)
{
return [
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
];
}
}
更改 admin 下的 UserController 内的 show 方法
验证 item 方法
public function show($id)
{
$user = User::find($id);
return $this->response->item($user, new UserTransform());
}
访问 laravel-dj.com/admin/users/1

验证 paginator 方法
public function show($id)
{
$users = User::paginate(1);
return $this->response->paginator($users, new UserTransform());
}
访问 laravel-dj.com/admin/users/1

验证 collection 方法
public function show($id)
{
$users = User::all();
return $this->response->colletion($users, new UserTransform());
}
访问 laravel-dj.com/admin/users/1

5. 使用 jwt 进行访问 限制 (请参考 具体安装 )
安装 jwt 的包
composer require tymon/jwt-auth:1.0.0-rc.4.1
在 config/app.php 下添加 provider
'providers' => [
...
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
发布 jwt 配置文件
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
修改 config/auth.php
#auth.php
return [
'defaults' => [
'guard' => 'admin',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
], 'admin' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];
修改 App\User 让 是 让 User 支持 jwt 用户 认证
<?php namespace App; use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
}
在 admin 下的 UserController 下的 show 方法 内 手动登陆 并编写 respondWithToken 方法 返回 token
public function show($id)
{
$user = User::find($id);
$token = auth('users')->fromUser($user);
return $this->respondWithToken($token);
}
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('users')->factory()->getTTL() * 60
]);
}
访问 laravel-dj.com/admin/users/1 获取 token

修改 routes/api/admin.php 使用 jwt 进行访问限制
#admin.php
<?php
$api = app('Dingo\Api\Routing\Router');
$api->group(
[
],
function ($api) {
$api->get('best', function(){ return 'admin best';});
$api->get('users/{id}', 'UserController@show');
$api->group([
'middleware' => ['jwt.auth']
], function ($api){
$api->get('users',function(){
return auth()->user()->toArray();
});
});
}
);
访问 laravel-dj.com/admin

直接访问 会报错 需要加上 token
header 内 加上 Authorization:bearer Token 和 X-Requested-With:XMLHttpRequest 即可正常访问

以上 就是 laravel + dingo + transformer + jwt 的 环境搭建 具体的业务细节 还要 根据需求慢慢去弄 基本雏形就是这样了。
3. laravel 5.5 多子域名 + dingo + jwt 简单环境搭建的更多相关文章
- PHP Laravel系列之环境搭建( VirtualBox+Vagrant+Homestead+系列网址)
搭建环境从来都是阻挡一门新技能的最致命的硬伤,为了这个环境,我又是花费了半天的时间,各种问题层出不穷,下面基于网上的一些教程(我看到的都多少有些问题) 开始的时候是在实验楼这个平台上开始学习的,不过 ...
- php开发环境搭建——laravel框架,apache服务器,git版本控制
本文主要阐述做项目前的开发环境安装——后端为php,前端采用grunt进行自动化构建.具体介绍了windows平台下采用apache运行php的环境搭建,以及git工具安装.写得有点粗糙,但过程完整, ...
- Laravel 开发环境搭建 - Windows
Laravel 开发环境搭建 - Windows : https://laravel-china.org/docs/laravel-development-environment/5.5/dev ...
- LNMP环境搭建:Nginx安装、测试与域名配置
Nginx作为一款优秀的Web Server软件同时也是一款优秀的负载均衡或前端反向代理.缓存服务软件 2.编译安装Nginx (1)安装Nginx依赖函数库pcre pcre为“perl兼容正则表达 ...
- Nginx配置多个基于域名的虚拟主机+实验环境搭建+测试
标签:Linux 域名 Nginx 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xpleaf.blog.51cto.com/9 ...
- 基于Centos搭建Laravel 环境搭建
系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...
- 【nginx,apache】thinkphp ,laravel,yii2开发运行环境搭建
缘由 经常会有人问xx框架怎么配置运行环境,这里我就给贴出吉祥三宝(Yii2,Laravel5,Thinkphp5 )的Nginx和Apache的配置,供大家参考 Nginx Yii2 server ...
- 阿里云服务器之Tomcat环境搭建以及域名绑定
上一步主要主要讲解在服务器中建立自己的hexo博客环境,最后达到可以远程访问,以及远程git推送到github.这章主要讲解Tomcat环境的搭建,以及域名解析.到这里你的服务器以及可以被全世界的人民 ...
- Atiti. Php Laravel 5.1 环境搭建以及 error 排除
Atiti. Php Laravel 5.1 环境搭建以及 error 排除 1. php_5.6.11_apache2.41 1.1. Httpd.Conf增加以下配置,添加php支持1 1.2. ...
随机推荐
- 51nod 1352:集合计数
1352 集合计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2 ...
- HihoCoder第十一周:树中的最长路
#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中, ...
- 官网英文版学习——RabbitMQ学习笔记(五)Publish/Subscribe
发布/订阅模式:把一个消息发送给多个消费者. 前几篇文章的思想是,我们好像看到了生产者将消息直接发送给queue,然后消费者也从queue中进行消费.其实并非如此,RabbitMQ中的消息传递模型的核 ...
- 2018年Android面试题含答案--适合中高级(下)(转)
这里是我整理出来的 面试题,答案我花了很久的时间.加上我自己的理解整理出来的,作者不易,请谅解.有答案的的:https://xiaozhuanlan.com/topic/6132940875 1. ...
- swoole在线聊天学习笔记
<?php $http=); $http->on('request',function(swoole_http_request $request,swoole_http_response ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:SSM(Spring+Spring MVC+MyBatis)框架整合搭建详细步骤
因为 Spring MVC 是 Spring 框架中的一个子模块,所以 Spring 与 SpringMVC 之间不存在整合的问题.实际上,SSM 框架的整合只涉及 Spring 与 MyBatis ...
- Mysql升级、免安装版MYSQL安装与卸载
1. 备份好数据库:表结构和数据: 2. 备份my.ini文件和data文件夹: 3. 卸载旧版本mysql: 4. 安装新版本mysq ...
- spring源码 ListableBeanFactory接口
ListableBeanFactory接口表示这些Bean是可列表的 /* * Copyright 2002-2016 the original author or authors. * * Lice ...
- 线段树&树状数组与离散化的妙用
牛客2019多校联盟Day7 Fine the median 题意: 每次给数组插入区间[Li,Ri] 内的所有数,每操作一次查询中位数. 遇到这题真的算是巧合,然而就是这种冥冥之中的缘分,给了我线 ...
- ES6中字符串的新增方法梳理
1.String.fromCodePoint(); String,fromCodePoint()方法可以认为是对String.fromCharCode()方法的扩展,这两个方法的共同点在于都是用于Un ...