一些技巧讓你的 Laravel 程式碼更優雅
簡單記錄一套流程和思路,詳細的實現和變化可以參閱 Laravel 官方文件。
功能實現
寫一個控制器,包含 表單驗證
、Restful
、Eloquent
、 Json返回
、 異常處理
、路由中介軟體
和 Swagger文件生成
的功能 。
路由中介軟體 + Restful 實現
/*
|--------------------------------------------------------------------------
| 登入中介軟體 Authority 路由
|--------------------------------------------------------------------------
*/
Route::group(['prefix' => 'v1','middleware' => 'Authority'],function (){
Route::resource('Product','ProductController');
// 省略
/**
* 可以定義一些非 restful 路由
* 獲取試用品類
*/
Route::get('/getTryPercent', ['uses'=>'StaticController@getTryPercent']);
});
表單驗證
快速生成
php artisan make:requests ProductValidate
詳細程式碼
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Contracts\Validation\Validator;
class ProductValidate extends FormRequest
{
/**
* 授權驗證
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* 表單驗證的驗證規則
*
* @return array
*/
public function rules()
{
return [
'BrandName' => 'filled|max:5',
'ProductCname' => 'filled|max:5|unique:product',
'UID' => 'required|Integer'
];
}
/**
* 驗證失敗的異常處理
* @param Validator $validator
*/
protected function failedValidation(Validator $validator)
{
$data['message'] = $validator->errors()->first();
respondErr($data['message']);
}
}
Eloquent
快速生成
php artisan make:model Model/Product
詳細程式碼
namespace App\Model;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Product extends Model
{
/**
* 關聯到模型的資料表
*
* @var string
*/
protected $table = 'product';
/**
* @var string 主鍵
*/
protected $primaryKey = 'ID';
/**
* @var bool 取消Eloquent 的預設時間
*/
public $timestamps = false;
/**
* @var string 設定 db-config-name
*/
protected $connection = 'mysql';
/**
* @param \Illuminate\Database\Eloquent\Builder $query
* @param $ID
* @return mixed
*/
public static function scopeOfID($query, $ID)
{
return $query->where('ID',$ID);
}
/**
* 獲取產品單條資料
* eloquent + DB查詢 + 原生,按具體需求封裝 查詢
* @param $ID
* @return mixed
*/
public static function one($ID)
{
$productOneInfo = DB::table('product')->where('ID','=',$ID)->where('IsDeleted','=',0)->get();
if (!$productOneInfo->isEmpty()){
# 省略 ...
}else{
//丟擲異常
respondErr();
}
return $productOneInfo;
}
# eloquent 方式軟刪除
public static function softDelete($ID)
{
$softDelete = self::where('ID',$ID)
->update(['IsDeleted' => 1]);
return $softDelete;
}
}
路由中介軟體
1 App\Http\Middleware\Authority.php
2 程式碼實現
如果是 Laravel全棧框架,可以更豐富功能,比如直接返回渲染的模版,跳轉路由,這裡是實現純Api專案,實現簡單驗證即可。
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class Authority extends Controller
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
//新增邏輯 如果沒登入
$inputList = $request->all();
$UID = isset($inputList['UID']) ? $inputList['UID'] : 0 ;
$loginStatus = $this->loginCheck($UID);
if (1 == $loginStatus) {
## 已經登陸了,正常跳轉
return $next($request);
} elseif (-2 == $loginStatus){
## 未登入
return respond($loginStatus,'-1','身份驗證失敗,請重新登入');
}elseif (-1 == $loginStatus){
## 未登入
return respond($loginStatus,'-1','會話超時,請重新登入');
}else{
return respond($loginStatus,'-1','登入身份異常');
}
}
/**
* 檢查是否登入Cookie
* @param int $UID
* @return int
*/
public function loginCheck($UID=0)
{
# 省略驗證程式碼
}
}
Swagger 文件
參考這篇就可以~ Swagger 文件
控制器
use App\Model\Product;
use Illuminate\Http\Request;
use App\Http\Requests\ProductValidate;
/**
*
* @SWG\Get(path="/v1/Product",
* 省略SWG 生成文件程式碼
* Restful-Post Api
*/
public function store(ProductValidate $productValidate,Product $product)
{
# 表單驗證
$inputList = $productValidate->validated();
unset($inputList['UID']);
# Eloquent
$this->resData = $product->insertGetId($inputList);
# Json返回 + 異常處理
return respond($this->resData,$this->resData);
}
相關文章
- 使用Async,讓你的Node.js程式碼更優雅Node.js
- 幾個簡單的技巧讓你寫出的vue.js程式碼更優雅Vue.js
- 帶引數的 Python 裝飾器讓你的程式碼更優雅Python
- 讓你的程式碼更優雅—去掉Xcode工程中某種型別的警告XCode型別
- DSL-讓你的 Ruby 程式碼更加優雅
- Go Interface 的優雅使用,讓程式碼更整潔更容易測試Go
- 想讓你的程式碼變得更加優雅嗎?
- 使用解構賦值與擴充套件運算子,讓你的程式碼更優雅賦值套件
- 編寫更優雅的 JavaScript 程式碼JavaScript
- 你見過哪些優雅的 Java 程式碼最佳化技巧?Java
- 讓你的React表單操作更優雅(formik+yup)ReactORM
- Android Annotation-讓你的程式碼和設計更加優雅(一)Android
- 聊一聊Java8 Optional,讓你的程式碼更加優雅Java
- 你的 JS 程式碼本可以更加優雅JS
- 用Assert(斷言)封裝異常,讓程式碼更優雅(附專案原始碼)封裝原始碼
- 優雅的程式碼
- PHPer這樣寫程式碼也許更優雅PHP
- ES6+好用的小技巧,讓你的程式碼更乾淨,短巧,易讀
- Laravel 5.6 中優雅的管理 swoole 程式Laravel
- 用 Node 抓站(二):Promise 使程式碼更優雅Promise
- 經驗總結 | 重構讓你的程式碼更優美和簡潔
- 全面吃透JAVA Stream流操作,讓程式碼更加的優雅Java
- Android Annotation-讓你的程式碼更加優雅(二)做一個Java詩人(JavaPoet)AndroidJava
- Go程式設計技巧–Goroutine的優雅控制Go程式設計
- 通過 Laravel 訊息通知使用 EasySms 簡訊服務,讓你的程式碼更簡潔Laravel
- java如何讓程式碼變得優雅——自定義註解Java
- Java11正式釋出了,讓你的程式碼更完美?Java
- 如何寫出優雅的程式碼?
- 寫出優雅的js程式碼JS
- 如何優雅的打包前端程式碼前端
- Laravel如何優雅的使用SwooleLaravel
- 通過facade(尤其是realtime facade)來使程式碼更優雅
- 怎麼讓程式碼不再臃腫,寫的像詩一樣優雅
- 如何讓git優雅的使用php-cs-fix格式化程式碼GitPHP
- 如何用 SpringBoot 優雅的寫程式碼Spring Boot
- Laravel 實用小技巧 —— 如何優雅地設計方法傳參?Laravel
- 使用 Laravel 時的一些小技巧Laravel
- 讓程式碼變得優雅簡潔的神器:Java8 Stream流式程式設計Java程式設計