一些技巧讓你的 Laravel 程式碼更優雅
簡單記錄一套流程和思路,詳細的實現和變化可以參閱 Laravel 官方文件。
功能實現
寫一個控制器,包含 表單驗證
、Restful
、Eloquent
、 Json返回
、 異常處理
、路由中介軟體
和 Swagger文件生成
的功能 。
路由中介軟體 + Restful 實現
/*
|--------------------------------------------------------------------------
| 登入中介軟體 Authority 路由
|--------------------------------------------------------------------------
*/
Route::group(['prefix' => 'v1','middleware' => 'Authority'],function (){
Route::resource('Product','ProductController');
// 省略
/**
* 可以定義一些非 restful 路由
* 獲取試用品類
*/
Route::get('/getTryPercent', ['uses'=>'[email protected]']);
});
表單驗證
快速生成
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 文件
控制器
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);
}
相關推薦
使用結構賦值與擴充套件運算子,讓你的程式碼更優雅
解構賦值 解構的作用是可以快速取得陣列或物件當中的元素或屬性,而無需使用arr[x]或者obj[key]等傳統方式進行賦值 字串的解構 字串也可以解構賦值。這是因為此時,字串被轉換成了一個類似陣列的物件 const [a,b,c,d,e] = hello; a //"h" b //"e" c //"l
一些技巧讓你的 Laravel 程式碼更優雅
簡單記錄一套流程和思路,詳細的實現和變化可以參閱 Laravel 官方文件。 功能實現 寫一個控制器,包含 表單驗證 、Restful 、Eloquent 、 Json返回、 異常處理、路由
5個小技巧讓你寫出更好的 JavaScript 條件語句
來源:掘金,譯者:Hopsken 連結:https://juejin.im/post/5bb9e3085188255c352d7326 作者:@Jecelyn Yeen 原文:https://scotch.io/tutorials/5-tips-to-write-better-conditi
五個小技巧讓你寫出更好的 JavaScript 條件語句
在使用 JavaScript 時,我們常常要寫不少的條件語句。這裡有五個小技巧,可以讓你寫出更乾淨、漂亮的條件語句。 1. 使用 Array.includes 來處理多重條件 舉個栗子: // 條件語句 function test(fruit) { if (
讓你的程式更優雅的sleep
sleep的作用無需多說,幾乎每種語言都提供了類似的函式,呼叫起來也很簡單。sleep的作用無非是讓程式等待若干時間,而為了達到這樣的目的,其實有很多種方式,最簡單的往往也是最粗暴的,我們就以下面這段程式碼來舉例說明(注:本文提及的程式編譯執行環境為Linux) /*
幾個簡單的技巧讓你寫出的vue.js程式碼更優雅
本文參考自油管上某個國外大神的公開演講視訊,學習了一下覺得很不錯,所以在專案中也使用了這些不錯的技巧。 1. watch 與 computed 的巧妙結合 如上圖,一個簡單的列表頁面。 你可能會這麼做: created(){ this.fetchData() }, watch: { keyword(
讓你的python程式碼更優雅(pythonic)—— 基於PEP8
寫出優雅的程式碼,自己除錯bug更加容易,也便於別人檢視,下面談談一下讓程式碼更加優雅的寫法,主要是基於 PEP8。 1,縮排與換行,每級縮排使用4個空格。 # yes: # 續行與其包裹元素要對齊 foo = long_function_name(var_one
分享幾個簡單的技巧讓你的 vue.js 代碼更優雅
turn per alarm 傳遞參數 rep ams spa () foreach 1. watch 與 computed 的巧妙結合 一個簡單的列表頁面。 你可能會這麽做: created(){ this.fetchData() }, watch: { key
Android Annotation-讓你的程式碼和設計更加優雅(一)
引子 最近我寫了一篇關於元件化的開源框架原始碼分析的文章(傳送門在下面兒)。那麼現在元件化小有名氣的JIMU框架,也是我下一個要給大家分享的原始碼分析文章。但因為其中涉及到了很多Java Annotation相關的知識。所以不得不在這裡,先安利一下本篇,這也是本篇的由來。 優秀框架原始碼分析系列(一)讓解
JAVA8-讓程式碼更優雅之List排序
JAVA8-讓程式碼更優雅之List排序 先定義一個實體類 @Data @AllArgsConstructor @NoArgsConstructor public class Human { private String name; private int age;
Python最好IDE:Pycharm使用小技巧總結,讓你寫程式碼更為舒適
1、pycharm的設定 本人對於Python學習建立了一個小小的學習圈子,為各位提供了一個平臺,大家一起來討論學習Python。歡迎各位到來Python學習群:960410445一起討論視訊分享學習。Python是未來的發展方向,正在挑戰我們的分析能力及對世界的認知方式,因此,我們與時俱進,迎
Java小工具Lombok安裝和使用,讓JAVA程式碼更優雅
Lombok簡介Lombok專案通過新增“處理程式”,使java成為一種更為簡單的語言。作為一個Old Java Developer,我們都知道我們經常需要定義一系列的套路,比如定義如下的格式物件。public class DataExample { private fi
打造高逼格的開發利器,讓你的程式碼敲出打字機的效果,甚至更……
作為程式設計師程式設計是非常重要的,但是在程式設計之餘更為重要,更為好玩的一件事就是:打造自己敲程式碼的編輯器。我相信很多人都給自己的程式碼編輯器,檢視器,IDE 等打造過各種風格,各種樣式的主題,以顯得自己敲程式碼的工具更加有逼格,更加炫酷。 說實話,適合編
5個技巧讓你更好的編寫 JavaScript(ES6) 中條件語句
使用 JavaScript 時,我們經常需要處理很多條件語句,這裡分享5個小技巧,可以讓你編寫更好/更清晰的條件語句。 1.使用 Array.includes 來處理多個條件 我們來看看下面的例子: JavaScript 程式碼: // condition functi
Python丨給你的爬蟲程式碼裡面新增一些小功能,讓你的程式碼與眾不同
1. 爬蟲程式隨機暫停x秒 需要用到time和random兩個python自建庫。 用法:time.sleep(x) 程式暫停x秒 random.uniform(a, b):產生從a到b中的隨機浮點數 random.random():產生從0到1中的隨機浮點數,是unif
【轉】【譯】讓你的網站更炫酷的一些小 tips
上週,我和一位老客戶聊天,她說:“尼克,我覺得我的網站需要改進,但我不能確定我具體需要做什麼。” 然後我就去問了一圈,包括朋友、家人和其他非網際網路行業的商務人士,他們都提到了相同的觀點: “我需要一個檢查清單,因為我不知道怎樣建站,這也是我要僱人
Javascript Promise讓程式碼更優雅
回撥函式真正的問題在於他剝奪了我們使用 return 和 throw 這些關鍵字的能力。而 Promise 很好地解決了這一切。 在非同步程式設計中,我們經常需要使用回撥函式,過多層級的回撥會使本來簡潔的程式碼變得深奧隱晦難明,使用promise能完美
github 專案搜尋技巧-讓你更高效精準地搜尋專案
目錄 github 搜尋技巧 案例 普通搜 搭配技巧搜 限定詞 查詢某個使用者或組織的專案 輔助限定詞 還沒
9條消除if...else的錦囊妙計,助你寫出更優雅的程式碼
### 前言 最近在做程式碼重構,發現了很多程式碼的爛味道。其他的不多說,今天主要說說那些又臭又長的if...else要如何重構。 在介紹更更優雅的程式設計之前,讓我們一起回顧一下,不好的if...else程式碼 ### 一、又臭又長的if...else 廢話不多說,先看看下面的程式碼。 ``` publ
想讓你的程式碼變得更加優雅嗎?
作為一名開發人員,工作之外的時間總是在學習新事物。作為前端開發人員必須知道一些使我們的程式碼如何更優雅,工作更輕鬆的技巧,讓自己的程式碼寫的更加高大上,下面這些技巧獲取可以幫助到你。 1. 多個條件判斷 // longif( x === 'a' ||&n