iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1
自我挑戰組

Laravel 實戰經驗分享系列 第 4

Laravel 實戰經驗分享 - Day4 開發工具以及 Laravel 目錄結構

本文同步發於我的部落格 - https://lajiooh.com/2020/09/19/ithome2020-day4/

參加鐵人賽的第一個周末,真是無比難熬,只想要整天躺在家裡看 Netflix XDDDDD,不過才參加第四天就放棄太鳥了,所以我覺得還是要堅持下去RRRRRRRR

說實話,我覺得自己前幾天的文章稍嫌零散,應該要帶大家看過 Laravel 專案的目錄,再進行 .env 的設定才對,搞得整個文章牛頭不對馬嘴,請大家多見諒,所以在今天,我要跟大家介紹一下目前在開發上使用的一些工具以及目錄結構。

Visual Studio Code

我平常的開發都是以 VSCode 為主,這是微軟開發的 Open Source 專案,在推出的這幾年已逐漸成為最主流的文字編輯器,由於生態系龐大,因此也有許多不錯的 plugin 可以使用,這邊介紹幾個我常用的 Laravel 開發工具。

  • PHP Intelephense
    這個工具會提供開發者 PHP 語法的提示,算是非常好用的工具,另外開發團隊也提供 Licence 購買,可以獲得更完整的功能,我自己有買,約合台幣 $340 非常划算,如果你是常使用 PHP 進行開發的人建議都可以買。

  • PHPfmt - PHP formatter
    這是 PHP 的格式美化工具,現代的 PHP 有其寫作風格規範如 PSR-1、PSR-2 等,因此這個工具可以幫助你在寫程式的同時,自動進行程式碼的格式化。

  • Laravel Blade Snippets
    這個外掛能夠自動完成某些 Laravel 的程式碼片段。由於 Laravel 的開發團隊在 Laravel 5 後的版本已開始加快版本的更新,幾乎是半年就推出新的版本。在這一年中,Laravel 的版本已從 6 升級到了 8,目前這個外掛有支援到 Laravel 7,因此若是使用 8 開發的人可能要再稍等一下。

  • Remote SSH/WSL
    這個可以說是 VSCode 中非常強大的外掛之一,他可以協助你直接連接自己電腦本地端的 WSL,或是開在遠端的 Linux 機器,如果你希望能夠連到遠端執行程式可以下載這個外掛,不過因為公司有很多專案已上 Production,因此除非是不可抗力的因素,我盡量還是在本地開發後再 commit code 到遠端,以免影響在產品線上的服務。

Laravel 專案目錄結構

如下,就是 Laravel 的專案目錄結構囉!

  • app
    這個目錄底下主要放的是你所撰寫的核心程式碼以及應用功能。
  • bootstrap
    這邊講的不是那個 RWD 框架,資料夾內的 app.php 主要功能是啟用 Laravel 這個框架,裡面也有 cache 資料夾,主要是儲存如 Route 以及 Service 的快取,以提升框架的效能
  • config
    官方文件表示多閱讀裡面的文件對你來說是一件好事XD,總之許多框架內或者是自己另外安裝的套件參數以及設定皆在這個目錄中,可以幫助你熟悉所有可以設定的選項。
  • database
    如資料夾名稱,這個目錄主要處理任何有關資料庫的功能,包含 Laravel 強大的 database migration、自動填充資料的 data seeder、測試用的 model factories 等皆是在這邊處理。
  • public
    這個目錄就是整個應用程式的入口,裡面的 index.php 是所有請求的入口,也會設置好 PHP 的 Autoload,除此以外,編譯好的 assets 例如 js、css 及 image 等資料皆可放在這個目錄下。
  • resources
    這個目錄下面主要放所有尚未編譯的 assets 檔案,例如 SASS、LESS、Javascript、Blade 模板等檔案。
  • routes
    Larvel 的應用程式路由都會在此定義,預設的狀況下共有四個路由 web.php api.php console.php channels.php,在我自己目前開發過的專案,大部分使用 web.php api.php 就綽綽有餘了。
    • web.php
      通常在一般的 MVC 架構下,Laravel 都是用這個檔案實現其路由,它提供包含 session、cookie 加密、CSRF 保護等功能。
    • api.php
      如果你的應用是要以無狀態或是 RESETful API 去實現的話,Laravel 也提供了 API 的路由,所以透過 API 的方式進入應用程式中,需要使用 Token 進行驗證,也無法訪問 session,這也是現在的網站使用 SPA 應用時會需要的功能,在 Laravel 當中都可以很簡單地進行設置。
    • console.php
      這個檔案並沒有定義 HTTP 的路由,但是它定義了所有基於 Closure (閉包) 的指令,每一個 Closure 都能夠連結到一個 command,因此若是在 Laravel 應用中要定義一些 command 指令,也可在此設置。
    • channels.php
      這個檔案是用來註冊所有的廣播應用,如果你的 Laravel 需要用到廣播功能可在此檔案註冊。
  • storage
    這個資料夾包含已被編譯過的 Blade 模板、檔案的快取等。另外也分成幾個資料夾,app 用來儲存你這個應用程式產生的任何檔案;framework 儲存這個框架產生的檔案及快取;logs 包含了整個應用程式執行的日誌以及記錄。
    通常這個資料夾在主機下我們開的權限都會比較高,
    另外,若你的應用中有檔案上傳、下載功能存放在本機內,檔案都會被放在這個 storage/app/public 下面,因此會需要下一個指令 php artisan storage:link command 建立 storage 的連結。
  • test
    Laravel 有引入 PHPUnit 這套 PHP 的測試框架,因此在應用程式的測試都是寫在這邊,每一個測試都需要以 Test 作為檔案字首,預設狀況下以 php vendor/bin/phpunit 指令進行測試。
  • vendor
    vendor 就是在存放這些套件以及依賴的資料夾,在 Laravel 初始化時,我們會使用 composer install 進行套件的安裝,之後就會產生此資料夾。

--

本日結語

這次重新整理了一下所有 Laravel 專案的結構,自己也在官方文件翻來翻去,很多用途也是我在寫這篇文章時整理出來才知道的,這樣系統性的整理對我來說也是更了解了這套框架的特性,今天就先到這邊囉!(來去看 Netflix 了 XD)


上一篇
Laravel 實戰經驗分享 - Day3 Nginx 以及環境變數設置
下一篇
Laravel 實戰經驗分享 - Day5 初探 Laravel - Artisan
系列文
Laravel 實戰經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言