1. 程式人生 > >一些技巧讓你的 Laravel 程式碼更優雅

一些技巧讓你的 Laravel 程式碼更優雅

簡單記錄一套流程和思路,詳細的實現和變化可以參閱 Laravel 官方文件。

功能實現

寫一個控制器,包含 表單驗證RestfulEloquentJson返回異常處理路由中介軟體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