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
建立 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 建立關係的項目中,這裡舉例子來說明:
以送養人可以擁有多隻寵物,對於這些寵物則對應同一個送養人
這裡我們希望在新增寵物時,可以下拉選單選取他所屬的送養人是誰
送養人會自動產生關聯,得知他一共擁有多少隻寵物
送養人 (guardian) 會擁有許多寵物 (Adoptee) ,Adoptee 的 Model 空間命名位置 : App\Adoptee
從哪一列…? Adoptee 被引用於(reference) Guardian? guardian_id
顯示向詳細訊息
顯示 Adoptee: name
寵物 (adoptee) 原始送養人 (guardian) ,Guardian 的Model空間命名位置: App\Guardian
從哪一列…? Adoptee 被引用於(reference) Guardian? guardians_id
選取項詳細訊息
顯示 Guardian: name
保存 Guardian: id
Continue Reading這裏參考 The 2018 Mighty Laravel Application 20 Optimization Ideas Checklist 列出提升 laravel 應用程式性能的 20 項目
Continue Reading改寫 Voyager BREAD Views 的方法,可區分改寫指定的 BREAD 或者全部的 BREAD
首先,在 resources/views/vendor/voyager/
位置,建立 slug 資料夾
資料夾名稱等同於當初你建立 BREAD 所設定的 slug-name
Continue Reading根據官方描述,大致整理以下介紹重點:
Voyager 是一個 admin interface,可以很輕易的為你的 app 建構 CRUD 功能,建構 Menu 選單,以及管理 media 檔案 ,此外,在管理介面的 Database Manager 可以直接用來管理資料庫及資料表,BREAD (Browse, Read, Edit, Add, & Delete) 功能則是可以很簡便的就直接設定資料表欄位在哪些時候要出現,以及他的功能屬性是什麼(文字欄位,選單,圖片..),該欄位的驗證規則…(詳細請參考 BREAD說明)
不是傳統的內容管理系統(CMS),部落格平台,當然也不是 wordpress 😜
雖然如此,你仍可以把 voyager 用來作為 CMS或 blog,一切都是可以由你自行決定
只要透過 Laravel+Voyager,你就能建立多種組合後台,並且是非常簡易的就能夠達成這些目的。
接下來,說明基本的安裝流程:
composer require tcg/voyager
在開發上傳檔案套件過程,原本測試圖片上傳功能都正常
但是當上傳 pdf, video 時,卻遇到 getMimeType 發生 The file "" does not exist 的錯誤
查詢原因,原來是在 php 原始設定的最大上傳限制設定太低
因此,開啟 php.ini 設定 upload_max_filesize 調整為 10Mb 即可正常上傳
Continue ReadingLaravel Telescope 是一個全面監控的 debug 助理,是由 Laravel 開發團隊所推出的一項功能,支援 Laravel 5.7.7 以上的版本。
其中包括以下的項目都包含在 watcher :
Continue Reading前面提到,在 l5-repository 有兩種方式可以實作 Presenter
第一種,可以直接建立 Transformrer 並且設定他來操作 Presenter class 第二種,可以直接在 model 實作 Transform 的 interface,並且 use 預設的 Presenter ModelFractarPresenter,也能達到同樣的效果
開始使用 Presenter 之前,必須 Requires Fractal
Continue Readingcomposer 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 主旨在建立一個快速微服務框架
在預設的功能中,僅保留少數 laravel 原生功能項目
舉例來說,Lumen 不提供 artisan make:controller
因此,在建立 controller 時候需要手動方式生成
在 controller 裏已經有準備好 controller.php 讓你方便複製
這裡則是要介紹,如何透過擴充 lumen generator ,將 laravel 多數 command 能在 lumen 中使用
Continue Reading在這裡記錄一下 FastCGI 與 PHP-FPM 的關係
FastCGI 是一個協定,從字面上其實就能看到 Fast + CGI,意思就是加速CGI
CGI 是一個協定,在webserver接收到請求時,會跟請求內容進行對應處理,再返回對應文件給瀏覽器
Continue ReadingLaravel 的 requests 可以將請求所需要的驗證進行分離,在這裡主要談一談 Requests 的建立方法 ,以及針對它進行測試的一些方式進行說明。
首先,建立一個 Requests
Continue Reading這裡記錄如何運用 migrate 及 Seeds 來建立自動部署流程
Continue Reading這裡列出幾個推薦使用的Visual Studio Code 利於 Laravel 開發的套件
Continue Reading