Go to file
2020-02-26 11:05:21 +08:00
app 加入前台列表頁與單一文章頁 2020-02-26 11:05:21 +08:00
bootstrap init 2020-02-21 23:49:03 +08:00
config 完成後台編輯文章架構 2020-02-23 21:48:51 +08:00
database 新增產生媒體及媒體分類假資料的指令 2020-02-23 21:48:51 +08:00
public 使得robots.txt由程式產生,加入若干html meta,加入自動產生html title的機制 2020-02-23 01:08:59 +08:00
resources 加入前台列表頁與單一文章頁 2020-02-26 11:05:21 +08:00
routes 加入前台列表頁與單一文章頁 2020-02-26 11:05:21 +08:00
storage init 2020-02-21 23:49:03 +08:00
tests init 2020-02-21 23:49:03 +08:00
.editorconfig init 2020-02-21 23:49:03 +08:00
.env.example add CACHE_PREFIX to env file 2020-02-23 01:08:59 +08:00
.gitattributes init 2020-02-21 23:49:03 +08:00
.gitignore 加入權限機制, Auth相關views, 後台views及相關機制 2020-02-23 01:08:59 +08:00
.styleci.yml init 2020-02-21 23:49:03 +08:00
artisan init 2020-02-21 23:49:03 +08:00
composer.json 加入 predis/predis套件 2020-02-23 01:08:59 +08:00
composer.lock 加入 predis/predis套件 2020-02-23 01:08:59 +08:00
package-lock.json 加入後台媒體庫功能 2020-02-23 01:08:59 +08:00
package.json 加入後台媒體庫功能 2020-02-23 01:08:59 +08:00
phpunit.xml init 2020-02-21 23:49:03 +08:00
README.md README 2020-02-23 22:02:33 +08:00
server.php init 2020-02-21 23:49:03 +08:00
webpack.mix.js 完成後台編輯文章架構 2020-02-23 21:48:51 +08:00

1. 系統需求

  • PHP 7.3
  • PHP Extensions
  • BCMath
  • Ctype
  • JSON
  • Mbstring
  • OpenSSL
  • PDO PHP
  • Tokenizer
  • XML,

2. IDE需求

  • 支援Editor Config

3. 額外Composer套件

3.1 Dev

會自動產生Laravel相關的phpDocs, 使IDE對Laravel的支援度提高

輔助偵錯用的小工具

3.2 Online

權限管理(Role、Permission)

Redis連線套件

4. 安裝注意事項(網站資料庫重置後請從4.2開始)

4.1 Laravel安裝步驟

  1. 安裝Node Packages

npm i

  1. 複製.env.example 至 .env

cp .env.example .env

  1. 產生APP Key

php artisan key:generate

  1. 在.env填好資料庫資訊

4.2 網站安裝步驟

  1. 安裝資料表,建立預設資料

php artisan migrate --seed

  1. 建立管理員權限帳號

php artisan account:create-admin {email} {password}

  1. 建立編輯者權限帳號

php artisan account:create-editor {email} {password}

  1. 訪問後台,預設路徑為*/adm*

5. Debugbar使用說明

使用套件為 barryvdh/laravel-debugbar(正式環境請勿開啟)

5.1 載入Debugbar

.env 檔案內的 APP_DEBUG 設為 true

5.2 啟用與停用

啟用: 在網址後傳入參數: __debugbar , 值為 enable

例: https://example.com/?__debugbar=enable

停用: 在網址後傳入參數: __debugbar , 值為 enable 之外的任意值

例: https://example.com/?__debugbar=disable

6. 設定語系

新訪問的使用者會根據瀏覽器語言自動設定語系

如不支援,則設定成設定檔app.fallback_locale所定義的語系

6.1 支援的語系

所有支援的語系資訊在 config/languages.php

6.2 切換語系

網址傳入參數: locale

例: https://example.com/?locale=ja

7. 資料夾檔案與類別

7.1 程式類別

  • Controllers

App\Http\Controllers\Admin

後台

App\Http\Controllers\Admin\Menu

後台選單

  • App\Presenters

用來輔助產生Html或文字的類別

  • App\Repositories

用來進行複雜的資料庫存取可繼承BaseRepository

  • App\Service

其他的輔助類別

7.2 Config(設定檔)

  • config/admin.php

後台相關設定檔

  • config/data-resets.php

網站的種子資料(須在網站安裝時存入的資料透過Seeder安裝)

  • config/languages.php

網站所支援的語系

7.3 圖片檔案

  • storage/app/public/uploads/app

媒體庫上傳的檔案

8.自訂Artisan指令列表

Artisan指令參數格式

  • {xxx} 必填,輸入 xxx
  • {xxx?} 選填,輸入 xxx
  • {--xxx} 可選選項,輸入 --xxx
  • {--xxx=} 可選選項,輸入 --xxx=值,不帶的話都是隨機產生

輸入範例指令media:create {amount?} {--app} {--user=} {--width=} {--height=} {--category=}

media:create 1
media:create --app --user=1 --width=1080
media:create --user=1 --category=12

8.1 帳號

  • 建立管理員帳號
account:create-admin {Email} {密碼}
  • 產生編輯帳號
account:create-editor{Email} {密碼}

8.2 建立檔案

  • 建立一個Repository類別檔案
make:repository {類別名稱: xxxRepository}
  • 建立一個後台選單Controller(MenuItemController)檔案

主項目

make:menu-item-controller ParentMenuItemController

子項目

make:menu-item-controller Parent/Children/ChildrenMenuItemController

8.3 媒體庫(參考9.)

  • 產生媒體庫圖片
media:generate {數量?}預設1 {--user=}使用者id {--width=}寬度 {--height=}高度 {--category=}媒體庫分類id

8.5 媒體庫分類

  • 產生媒體庫分類
media-category:generate {數量?}預設1 {--app}是否為網站媒體庫分類 {--user=}使用者id

8.6 Permission

  • 重新安裝所有角色與權限當data-presets檔內有修改權限的話可用這個指令重新安裝會將原本有的重新對應權限給角色
permission:reinstall

9. 媒體庫

後台使用者共用媒體庫圖片

10. 後台選單架構

10.1 建立選單的流程

  1. app/Http/Controllers/Admin/Menu/ 下依照原有結構去建立資料夾及Controller一個Menu項目建立一個Controller
  2. 每個Controller皆繼承App\Http\Controllers\Admin\Menu\BaseMenuItemController
  3. Controller內填入
  • name (選單名稱,可支援翻譯路徑表示法)
  • slug (選單項目唯一名稱,不可重複)
  • permissions (選填,設定後台選單項目的權限,須有權限才能看得到項目及進去頁面,如果有子母選單,則要看到子選單,必須要有母選單的權限才行,子選單也可獨立設定權限,這樣就兩個權限都要符合才行)
  • iconClasses (選填選單項目圖示的class, 可為陣列或字串)
  • badge (選填Bootstrap的badge)
  • type (badge類型) secondary、dange、success等等
  • label (badge的文字內容)
  • isPill (是否為橢圓形)
  1. 繼承"handle" method處理進去選單項目時的動作如果是母選單項目可不設因為母選單點下去就只是展開子選單而已不會有動作
  2. config/admin.phpmenuItems內填入新增的Controller

type支援item、title(文字)、divider(分隔線),參考App\Presenters\Admin\MainMenuItemPresenter

10.2 相關類別

  • App\Services\Admin\MainMenuItemService

Singleton Instance建構及儲存Menu項目的資料

  • App\Provider\AdminMenuServiceProvider

讀取config/admin.php中的menuItems設定建立route與儲存到MainMenuItemService

  • App\Presenters\Admin\MainMenuItemPresenter

根據MainMenuItemService內儲存的Menu資料建構Html

  • App\Http\Middleware\CheckAdminMenuPagePermission

    檢查Admin選單項目的route權限

11. 後台"設定"頁面及程式架構

11.1 新增一個設定子頁面的流程

  1. config/app.phpoptions內設定頁面的slug及頁面下面有哪些選項

    'page_slug' => [ // 頁面slug
        'permission': 'admin manage options page_slug' // OptionsController的gate
        'option_1' => [  // 選項slug實際儲存在資料庫中的key
            'type' => 'checkbox', // 選填預設值為input text選項的類型支援的類型參考`App\Presenters\Admin\OptionFormFieldsPresenter`
            'label(選項的名稱)' => 'abc', // 翻譯的字串定義在lang/form.php內的labels
            'validator' => 'required|min:8', // 選填選項更新時的後端驗證規則此為Laravel Validator的規則
            'required' => true, // 選填選項輸入欄位的html中的required屬性,
        ]
    ]
    
  2. 建立設定頁面的選單項目Controller,在App\Http\Controller\Admin\Menu\Options\Children,並加入至config

11.2 相關類別

  • App\Providers\OptionRouteServiceProvider

建立儲存選項時的Route

  • App\Http\Controllers\Admin\OptionsController

儲存選項時的 Route Controller

12. MiddlWare

  • App\Http\Middleware\AdminAreaGuard

判斷後台權限

  • App\Http\Middlwware\CheckAdminMenuPagePermission

檢查Admin選單項目的route權限

  • App\Http\Middleware\DebugbarEnabler

開啟或關閉debugbar並處理

  • App\Http\Middlware\SetAppLanguage

設定網站語系

  • App\Http\Middleware\SetSiteStates

    設定SiteStateService中的資料

13. Service

  • App\Services\AppJsObjectService

提供資料給前端js使用

  • App\Services\MediaFileFactoryService

產生假的媒體檔案

  • App\Services\SiteStateService

    紀錄全域的網站狀態

14. Service Provider

  • App\Providers\AdminMenuServiceProvider

從Config檔案建立Menu Item並註冊相關Route

  • App\Providers\OptionRouteServiceProvider

建立後台設定頁面的route

  • App\Providers\SingletonServiceProvider

    初始化所有singleton class 的 instance

15. 資料表 & Model

  • disks Disk

本機儲存位置定義在config/filesystems.php

  • media_categories MediaCategory

媒體分類

  • media_files MediaFile

媒體檔案

  • media_sources MediaSource

外部媒體來源

  • model_translations ModelTranslation

Model的翻譯

  • options Option

設定選項

  • users User

使用者

  • password_resets

重設密碼的tokens

  • model_has_permissions

model的權限給spatie/laravel-permission套件使用的table

  • model_has_roles

model的角色給spatie/laravel-permission套件使用的table

  • permissions

權限給spatie/laravel-permission套件使用的table

  • roles

角色給spatie/laravel-permission套件使用的table

  • role_has_permissions

角色的能力給spatie/laravel-permission套件使用的table

16. Model

  • App\TranslatableModel

被繼承用需要翻譯的Model繼承的Model要設定需要被翻譯的屬性

  • App\Post

    被繼承用為各文章類型的Parent Model

17. 文章類型

建立文章類型的流程

  1. 建立Model繼承App\Post
  2. 建立migration基本屬性可使用App\Traits\PostBlueprintGettable:processSchema()傳入Blueprint
  3. 加入文章類型至/config/postTypes.php
  4. 加入選單項目(參考現有),後台管理功能和模板會自動共用

18. Event及Listener

用來在Model產生特定資料庫操作動作(增刪修)後做特定的事情

例如

  • Media刪除後須跟著刪除檔案
  • 可翻譯的Model被刪除後須跟著刪除翻譯資料

17.1 類別

  • App\Event

    Model做特定動作之後會發出的Event

  • App\Listeners

    發出Event之後要做的動作

  • App\Observers

    觀察Model並在Model做特定動作之後要做的動作

17.2 使用方法

Event

  1. 新增一個Event
  2. 新增一個Listener
  3. 在Model內註冊event
  4. 在EventServiceProvider內註冊Event對應的Listener
  5. 在Event內設定Event發生的主體Model
  6. 在Listener內處理要做的事情

Observer

  1. 新增一個Oberserver
  2. 在Model內註冊Observer
  3. 在Observer內處理要做的事情