Backend

Voyager - 客製化 Controller

客製化 Controller

要在指定的 BREAD 套用客製化 Controller 設定,流程如下:

Continue Reading

Laravel Json回應及錯誤處理

Laravel Json回應及錯誤處理

Laravel 再遇到錯誤時,多數會拋出錯誤在介面顯示,並且中斷

這時可以透過 try catch 來捕捉拋出錯誤,自定義要做什麼處理

下方式簡易的錯誤處理範例:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Exception;

class ErrortestController extends Controller
{
    public function index(){
        try {
            throw new Exception('When Error Happened');
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }
}

這裡列出 Exception 可用的方法

$e->getMessage(); //返回錯誤訊息
$e->getCode();    //返回錯誤代碼
$e->getFile();    //返回錯誤文件名稱
$e->getLine();    //返回發生錯誤的行數
$e->getTrace();   //backtrace()
$e->getTraceAsString();  //格式化成字串的 getTrace

建立 Support 處理返回 api 錯誤

建立 ApiSupport 來處理 api 錯誤

<?php

namespace App\Supports;

use Carbon\Carbon;

class ApiSupport
{

    /**
     * Api response 回傳格式
     *
     * @param array $DataSet
     * 
     * @return object $oResult 回傳值
     * @author Adam
     * @date 2019/01/22
     */
    public static function jsonResponseFormat($DataSet='')
    {
        $oCurrentTime = Carbon::now();
        //預設json返回格式
        $aDefaultDataset = [
                //可以設定在 .env
                "program"=> "my production",
                "version"=> "1.2.3",
                "release"=> "45",
                //動態參數
                "datetime"=> $oCurrentTime,
                "timestamp"=> strtotime($oCurrentTime->toDateTimeString()),
                "status"=> "",//success
                "code"=> 200,
                "message"=> "OK",
                "error"=> false,
                "error_message"=> "",
                "data"=> [
                    "rotues"=> [
                        "method"=>"GET",
                        "path"=> "/users",
                        "description"=> "Get user data"
                    ],
                    "message"=> "Hello world"
                ]
            ];
        $oResult = array_merge($aDefaultDataset, $DataSet);
        return $oResult;
    }
}

json回應就可以直接引用

Continue Reading

Voyager - Bread Create relationships

對於 Voyager 建立關係的項目中,這裡舉例子來說明:

範例

以送養人可以擁有多隻寵物,對於這些寵物則對應同一個送養人

這裡我們希望在新增寵物時,可以下拉選單選取他所屬的送養人是誰

送養人會自動產生關聯,得知他一共擁有多少隻寵物

Has Many

送養人 (guardian) 會擁有許多寵物 (Adoptee) ,Adoptee 的 Model 空間命名位置 : App\Adoptee

從哪一列…? Adoptee 被引用於(reference) Guardian? guardian_id

顯示向詳細訊息

顯示 Adoptee: name

Belongs To

寵物 (adoptee) 原始送養人 (guardian) ,Guardian 的Model空間命名位置: App\Guardian

從哪一列…? Adoptee 被引用於(reference) Guardian? guardians_id

選取項詳細訊息

顯示 Guardian: name

保存 Guardian: id

Continue Reading

軟體版本發布週期

軟體版本發布週期

軟體發佈的週期,會分為幾個階段流程,這邊做個簡記

Continue Reading

Laravel 性能檢核清單

這裏參考 The 2018 Mighty Laravel Application 20 Optimization Ideas Checklist 列出提升 laravel 應用程式性能的 20 項目

Continue Reading

Voyager - 複寫 View blade

改寫 Voyager BREAD Views 的方法,可區分改寫指定的 BREAD 或者全部的 BREAD

指定 BREAD

首先,在 resources/views/vendor/voyager/ 位置,建立 slug 資料夾

資料夾名稱等同於當初你建立 BREAD 所設定的 slug-name

Continue Reading

Voyager 入門

根據官方描述,大致整理以下介紹重點:

Voyager 是什麼?

Voyager 是一個 admin interface,可以很輕易的為你的 app 建構 CRUD 功能,建構 Menu 選單,以及管理 media 檔案 ,此外,在管理介面的 Database Manager 可以直接用來管理資料庫及資料表,BREAD (Browse, Read, Edit, Add, & Delete) 功能則是可以很簡便的就直接設定資料表欄位在哪些時候要出現,以及他的功能屬性是什麼(文字欄位,選單,圖片..),該欄位的驗證規則…(詳細請參考 BREAD說明)

Voyager 不是什麼?

不是傳統的內容管理系統(CMS),部落格平台,當然也不是 wordpress 😜

雖然如此,你仍可以把 voyager 用來作為 CMS或 blog,一切都是可以由你自行決定

只要透過 Laravel+Voyager,你就能建立多種組合後台,並且是非常簡易的就能夠達成這些目的。

接下來,說明基本的安裝流程:

安裝

composer require tcg/voyager

Continue Reading

解決,Laravel - getMimeType 取得檔案類型遇到 The file "" does not exist

在開發上傳檔案套件過程,原本測試圖片上傳功能都正常

但是當上傳 pdf, video 時,卻遇到 getMimeType 發生 The file "" does not exist 的錯誤

查詢原因,原來是在 php 原始設定的最大上傳限制設定太低

因此,開啟 php.ini 設定 upload_max_filesize 調整為 10Mb 即可正常上傳

Continue Reading

Laravel Telescope

Laravel Telescope

Laravel Telescope 是一個全面監控的 debug 助理,是由 Laravel 開發團隊所推出的一項功能,支援 Laravel 5.7.7 以上的版本。

其中包括以下的項目都包含在 watcher :

Continue Reading

l5-repository Presenter 上手2

Presenter

前面提到,在 l5-repository 有兩種方式可以實作 Presenter

第一種,可以直接建立 Transformrer 並且設定他來操作 Presenter class 第二種,可以直接在 model 實作 Transform 的 interface,並且 use 預設的 Presenter ModelFractarPresenter,也能達到同樣的效果

開始使用 Presenter 之前,必須 Requires Fractal

Continue Reading

l5-repository 上手

安裝

composer require prettus/l5-repository

設定 ServiceProvider

如果是 >= laravel5.5 ,ServiceProvider 會自動設定好

其他版本

要在 config/app.php 增加

'providers' => [
    ...
    Prettus\Repository\Providers\RepositoryServiceProvider::class,
],

發布設定

設定完成多出一個設定檔: /config/repository.php

php artisan vendor:publish --provider "Prettus\Repository\Providers\RepositoryServiceProvider"

Continue Reading

Lumen 擴充 generator

Lumen 主旨在建立一個快速微服務框架

在預設的功能中,僅保留少數 laravel 原生功能項目

舉例來說,Lumen 不提供 artisan make:controller

因此,在建立 controller 時候需要手動方式生成

在 controller 裏已經有準備好 controller.php 讓你方便複製

這裡則是要介紹,如何透過擴充 lumen generator ,將 laravel 多數 command 能在 lumen 中使用

Continue Reading

閒聊 FastCGI 與 PHP-FPM

閒聊 FastCGI 與 PHP-FPM

在這裡記錄一下 FastCGI 與 PHP-FPM 的關係

關於 FastCGI

FastCGI 是一個協定,從字面上其實就能看到 Fast + CGI,意思就是加速CGI

CGI 是一個協定,在webserver接收到請求時,會跟請求內容進行對應處理,再返回對應文件給瀏覽器

Continue Reading

Laravel-S 查看 worker 進程(筆記)

在開發 laravels 需要確認目前 worker 執行狀況

查看 laravels worker 進程的方式如下:

ps -ef|grep laravels

Continue Reading

wrk - 輕巧 http benchmark 工具,處理簡易的HTTP 性能測試

wrk 是用C語言寫的一套http benchmark 工具

可以幫助我們處理簡易的HTTP 性能測試

Continue Reading

Laravel - Requests 說明及測試方法

Laravel - Requests 說明及測試方法

Laravel 的 requests 可以將請求所需要的驗證進行分離,在這裡主要談一談 Requests 的建立方法 ,以及針對它進行測試的一些方式進行說明。

首先,建立一個 Requests

Continue Reading

Laravel - Eloquent model (二)

前面介紹過了如何建立 Model

這裡繼續用範例說明如何使用 Model 來進行數據操作

首先先建立一個 MemberController

Continue Reading

Laravel - Eloquent model (一)

Laravel 的 Eloquent model 提供查詢資料表以及新增資料到資料表的功能

這部分主要說明定義 Models 及 Migration

Continue Reading

Laravel - Migrate+Seeds 自動部署資料表及資料

這裡記錄如何運用 migrate 及 Seeds 來建立自動部署流程

Continue Reading

Laravel - Visual Studio Code 擴充套件及功能推薦

這裡列出幾個推薦使用的Visual Studio Code 利於 Laravel 開發的套件

Continue Reading