Laravel6 简单使用 API 注册访问实现(适合菜鸟)
本篇文章只适合刚入门的菜鸟查看。大神熟练工请忽略。
感悟
本人是一名对编程爱好者,从2004年就开始捣鼓程序这块。
不是靠这个吃饭。学习这个一方面有兴趣,另一方对工作生活有很多帮助。
从最早的VB,简单HTML,到后来的Flash ActionScript,在到后来java、C#都有过简单的了解和学习。
后来就感受到PHP的魅力,在后来HTML5和CSS3学的最好。
在后来了解了MVC思想,然后就用了TP,从3到5都用过。坑的真很多。。。过程很痛苦。
微信公众号火的那一阵,开发过微信服务号的应用,还赚点小钱。挺有成就感的。
最近自己在工作上有一个需求,比较灰色的需求,只能自己搞。
但是我真的不想用TP,至于什么原因你们懂的,我只能说国产的氛围很糟糕。
然后选来选去,确定了用laravel,直接从6搞起。反正我的程序,使用的圈子也不大。
经过几天捣鼓,我才发现。。。这玩意真特么好啊,果然名气大不是盖的。
然后就是捣鼓,首先顺利搞了传统的web方式实现,很轻松就搞定了。目前程序正在顺利使用中。
但是我不甘心啊,我想搞明白当下最流行的MVVC。
然后就去捣鼓什么Node,Webpack,但是我发现,我应该首先从服务器做好API接口才对,至于前端这块,对于我这样 简单的应用来讲,问题不大。
我就不停的找资料啊,看啊。。。
哎。。。受不了,绝大部分资料都不是laravel6之前的,好多东西又都对不上。
没办法,只能找一个差不多的,然后自己不停的去尝试。
现在把简单的API接口实现记录如下。
建立模型和对应的测试数据
admins表
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Str;
/**
* @property string api_token
*/
class Admin extends Model
{
use SoftDeletes;
//指定表明
//protected $table = 'admins';
//指定主键名
//protected $primaryKey = 'id';
//维护默认的时间戳
public $timestamps = true;
//黑白名单 仅在添加create方法时有效
//protected $fillable = ['name', 'type'];
protected $guarded = [];
//在生成及保存token
public function generateToken()
{
$this->api_token = Str::random(60);
$this->save();
return $this->api_token;
}
}
hfs表
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Hf extends Model
{
use SoftDeletes;
//protected $dates = ['deleted_at'];
//指定表明
//protected $table = 'show';
//指定主键名
protected $primaryKey = 'id';
//维护默认的时间戳
public $timestamps = true;
//黑白名单 仅在添加create方法时有效
//protected $fillable = ['name', 'type'];
protected $guarded = [];
}
以上数据对应 Admin.php Hf.php 两个模型
建立模型
Admin.php
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Str;
/**
* @property string api_token
*/
class Admin extends Model
{
use SoftDeletes;
//指定表明
//protected $table = 'admins';
//指定主键名
//protected $primaryKey = 'id';
//维护默认的时间戳
public $timestamps = true;
//黑白名单 仅在添加create方法时有效
//protected $fillable = ['name', 'type'];
protected $guarded = [];
//在生成及保存token
public function generateToken()
{
$this->api_token = Str::random(60);
$this->save();
return $this->api_token;
}
}
Hf.php
<?php
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Hf extends Model
{
use SoftDeletes;
//protected $dates = ['deleted_at'];
//指定表明
//protected $table = 'show';
//指定主键名
protected $primaryKey = 'id';
//维护默认的时间戳
public $timestamps = true;
//黑白名单 仅在添加create方法时有效
//protected $fillable = ['name', 'type'];
protected $guarded = [];
}
建立控制器
Admin控制器
<?php
namespace App\Http\Controllers\Api;
use App\Model\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\Admin as AdminResources;
use DB;
class AdminController extends Controller
{
/**
* Display a listing of the resource.
*
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function index()
{
return new AdminResources(Admin::query()->find(1));
}
/**
* Show the form for creating a new resource.
*
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function show($id)
{
$res = DB::table('admins')->where('id', $id)->first();
if ($res === null) { //检查传过来的ID是否能查找出数据
//throw new ApiException('非法操作');
return response(['message' => '非法操作'], 422);
} else {
return new AdminResources(Admin::query()->find($id));
}
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
HfController
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Model\Hf;
use Illuminate\Http\Request;
use App\Http\Resources\Hf as HfResource;
use DB;
class HfController extends Controller
{
/**
* Display a listing of the resource.
*
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function show($id)
{
$res = DB::table('hfs')->where('id', $id)->first();
if ($res === null) {
//throw new ApiException('非法操作');
return response(['message' => '非法操作'], 422);
} else {
return new HfResource(Hf::query()->find($id));
}
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
建立中间件
用来检测是否ajax访问和是否携带token请求,别忘了注册中间件
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAjax
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) mixed
*/
public function handle($request, Closure $next)
{
if (!$request->ajax()) { //检测是否ajax访问
return response(['message' => '非法访问']);
}
return $next($request);
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class CheckToken
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) mixed
*/
public function handle($request, Closure $next)
{
if (Auth::guard('api')->guest()) { //检测是否携带token请求
return response([
'message' => '没有访问权限'
]);
}
return $next($request);
}
}
注册路由中间件,顺序我放在上面
protected $routeMiddleware = [
'checkAjax' => \App\Http\Middleware\CheckAjax::class,
'checkToken' => \App\Http\Middleware\CheckToken::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
建立API资源类
Admin.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* @property mixed id
* @property mixed api_token
* @property mixed name
* @property mixed email
* @property mixed created_at
* @property mixed updated_at
*/
class Admin extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'api_token' => $this->api_token,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}
Hf.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
/**
* @property mixed returnNo
* @property mixed verCode;
* @property mixed account;
* @property mixed cardNo;
* @property mixed bank;
* @property mixed type;
* @property mixed lowMoney;
* @property mixed upMoney;
* @property mixed transDate;
* @property mixed serialNo;
* @property mixed description;
* @property mixed printDate;
* @property mixed sort;
* @property mixed project;
* @property mixed lot;
* @property mixed pTime;
* @property mixed created_at;
* @property mixed updated_at;
*/
class Hf extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) array
*/
public function toArray($request)
{
return ['returnNo' => $this->returnNo,
'verCode' => $this->verCode,
'account' => $this->account,
'cardNo' => $this->cardNo,
'bank' => $this->bank,
'type' => $this->type,
'lowMoney' => $this->lowMoney,
'upMoney' => $this->upMoney,
'transDate' => $this->transDate,
'serialNo' => $this->serialNo,
'description' => $this->description,
'printDate' => $this->printDate,
'sort' => $this->sort,
'project' => $this->project,
'lot' => $this->lot,
'pTime' => $this->pTime,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
// return parent::toArray($request);
}
}
修改auth.php
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'admins',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Model\Admin::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
'password_timeout' => 10800,
];
添加自定义异常提示
<?php
namespace App\Exceptions;
class ApiException extends Exception
{
public function __construct($message = "")
{
parent::__construct($message);
}
}
<?php
namespace App\Exceptions;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
{
/**
* A list of the exception types that are not reported.
*
* @var array
*/
protected $dontReport = [
//
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
* @var array
*/
protected $dontFlash = [
'password',
'password_confirmation',
];
/**
* Report or log an exception.
*
* @param \Exception $exception
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) void
*/
public function report(Exception $exception)
{
parent::report($exception);
}
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $exception
* [[@return](https://learnku.com/users/31554)](https://learnku.com/users/31554) \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
{
if ($exception instanceof ApiException) {
$result = [
"data" => $exception->getMessage(),
];
return response($result, 422);
}
return parent::render($request, $exception);
}
}
添加路由
<?php
use Illuminate\Http\Request;
Route::middleware('checkAjax')->group(function () { //检测是否为ajax访问
Route::post('register', 'Auth\RegisterController@register'); //注册
Route::namespace('Api')->group(function () { //规范
// 在 「App\Http\Controllers\Api」 命名空间下的控制器
Route::prefix('admin')->group(function () { //admin空间
Route::get('/', 'AdminController@index');
Route::get('show/{id}', 'AdminController@show');
});
Route::middleware('checkToken')->group(function () { //数据访问必须要有token
Route::prefix('hf')->group(function () { //恒丰银行数据
Route::get('show/{id}', 'HfController@show');
});
});
});
});
准备工作齐活
开始测试
搞定
按照以上做就可以在laravel6跑起来
里面肯定存在一些问题,毕竟偶不是专业的。
对于简单的应用应该可以用了,下面就可以安心搞前端了。
希望能够帮助到和我一样的菜鸟便宜们。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: