【PHP】Largon 快速部署 Laravel 專案

Xander發表於2022-12-27

引言

php

Largon部署Laravel非常簡單,只要對於PHP的一些元件進行相關了解即可。

Largon的bin元件介紹

  • Apache:老牌Web伺服器
  • Cmder:命令列工具(Windows下的終端模擬器)
  • Composer:PHP 包管理器
  • Git:分散式版本控制軟體
  • HeidiSQL:免費的資料庫管理工具(支援MySQL、MSSQL、Postgres)
  • Laragon:管理開發環境提供的工具/服務的平臺
  • Memcached:老牌快取系統
  • MySQL:最流行的開源資料庫系統
  • Nginx:高效能Web伺服器
  • Ngrok:安全的內網穿透利器(外網訪問內網站點)
  • Node.js:能夠在伺服器端執行JavaScript的開放原始碼、跨平臺JavaScript 執行環境
  • Notepad++:支援各種程式語言的文字編輯器
  • PHP:包含最新穩定版本的PHP
  • PuTTY:一個免費小巧的SSH客戶端
  • Redis:可以持久化的鍵值對儲存系統(可用於實現快取、NoSQL、佇列等)
  • Sendmail:郵件傳送代理軟體
  • Telnet
  • WinSCP:免費的SFTP&FTP客戶端
  • Yarn:NPM 包管理器

largon部署Laravel的一些優點

  • 美化 URL:使用 app.test 替代 localhost/app
  • 可移植:可以任意移動 Laragon 目錄(不同磁碟、不同電腦、或者雲服務)
  • 與系統隔離:Laragon 提供了一個與作業系統隔離的環境,從而保持了系統的乾淨
  • 簡易易用:Laragon 會自動為你完成複雜的底層配置,你可以輕鬆地在不同版本的 PHP、Python、Java、MySQL、Nginx、MongoDB 等軟體間切換
  • 現代&功能強大:基於現代化的軟體架構設計,從而適用於構建現代化的 Web 應用,很多日常瑣碎都可以一鍵幫你搞定。

瞭解Largon

Largon在過去的一篇英文部落格介紹過,這裡不再單獨介紹Largon。

[[How to develop locally a Laravel app using Laragon]](https://segmentfault.com/a/11...)

安裝Largon

Largon的最大缺點是只能支援Windows使用者使用,我們只需要到官網下載exe安裝包,一路下一步就可以了。

官網地址:https://laragon.org/download/

訪問資料庫

預設資料庫是 Laragon,使用者名稱是 root,密碼是 空字串,點選「開啟」按鈕,就可以訪問這個預設的資料庫:

進入到資料庫連線介面:

配置完成即可。

Largon安裝之後就可以立即初始化Laravel專案。

快速構建Laravel專案

Windows系統在介面的右下角右擊圖示,然後根據下面的提示自動構建專案即可。

構建專案之後可以使用:http://laravel.test

當然如果不喜歡Largon自己擅自動了配置,使用預設的方式可以比如 http://localhost/laravel/public/ 訪問可以直接看到相關的資源連結。

簡單瞭解Laravel框架入口流程

個人對於PHP基本是一竅不通,這裡翻閱到一篇社群的文件,這篇文章介紹了訪問Public下的index.php載入過程,也就是框架是如何進行初始化和引導的。

Lararel 框架執行流程詳解(1) 入口檔案

大致的匯入過程如下:

  1. 表面入口為public/index.php,內部程式碼引入了 bootstrap 目錄下的 app.php
  2. 透過核心的kernel進行引導初始化。
  3. $app->make(Kernel::class)是核心的啟動方法。
  4. 核心Kernel的主要工作:引導、處理請求、生命週期活動、獲取例項。
  5. Laravel完成初始化工作。

首先是進入到app.php檔案中:

$app = require_once __DIR__.'/../bootstrap/app.php';

$kernel = $app->make(Kernel::class);
require_once 意思是如果對應的檔案不存在會報錯,require_once 語句和 **require** 語句完全相同,唯一區別是 PHP 會檢查該檔案是否已經被包含過,如果是則不會再次包含。

接著我們可以看到Laravel的Kernel核心類,我們檢視它的類定義:

interface Kernel

{

    /**

     * Bootstrap the application for HTTP requests.

     * 為HTTP請求提供應用程式。

     * @return void

     */

    public function bootstrap();

  

    /**

     * Handle an incoming HTTP request.

     * 處理一個http請求

     * @param  \Symfony\Component\HttpFoundation\Request  $request

     * @return \Symfony\Component\HttpFoundation\Response

     */

    public function handle($request);

  

    /**

     * Perform any final actions for the request lifecycle.

     *  執行請求生命週期的任何最終行動。

     * @param  \Symfony\Component\HttpFoundation\Request  $request

     * @param  \Symfony\Component\HttpFoundation\Response  $response

     * @return void

     */

    public function terminate($request, $response);

  

    /**

     * Get the Laravel application instance.

     * 獲取例項

     * @return \Illuminate\Contracts\Foundation\Application

     */

    public function getApplication();

}

"核心“類幹了四個事情:引導、處理請求、生命週期活動、獲取例項這幾個關鍵行為。Kernel 類是在 Illuminate\Contracts\Http\Kernel的包中,我們可以透過var_dump或者下面的方式列印出例項化之後的內部物件屬性,當然也可以閱讀文章末尾一些不使用IDE或者外掛優雅DEBUG方法(請看末尾"擴充套件:PHP的Debug技巧部分")。

提示:個人構建的laravel 專案名稱就叫做 laravel,所以Largon配置為 laravel.test 。但是因為個人剛開始接觸Laravel,不太清楚在哪裡做了手腳

在列印結果中我們可以羅列出下面一些比較重要的屬性:

  • middleware
  • middlewareGroups
  • routeMiddleware
  • app
  • router
  • bootstrappers
  • middlewarePriority

重點看 app 屬性,app 屬性實際上是一個 Illuminate\Foundation\Application 的例項,這個例項包含了非常多的屬性值,挑選其中主要的內容:

  • loadedProviders
  • bindings
  • instances
  • aliases

完成屬性和初始化工作中,框架初始化程式碼會繼續呼叫 kernel 類的 handle 方法,傳入一個 request 請求,request 請求繼承了 SymfonyRequest,並呼叫了一個 capture 方法,之後返回的值返回給 response 變數,因為內部比較邏輯複雜,整個流程基本到此為止。

這個過程比較像是Tomcat的請求處理流程,或者說大部分的Web流程大體上都是幹這麼幾件事情,當然這些框架不是這麼幾句話可以講清楚的,kernel 類做了一系列的驗證,分發,處理,包括表單驗證,中介軟體,日誌記錄,呼叫控制器,查詢資料等等....

好了這裡點到為止,如果想要更深入理解,可以從這裡vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php作為入口繼續擴充套件。

常見問題

quick.app 快速建立專案失敗

比較簡單但是容易忽略的問題,Largon 快速構建專案實際上用的是composer,如果本地的composer --version找不到對應配置就會存在報錯的情況。

構建完成之後,如果看到下面的內容,說明正確的下載並且部署專案:

***** NOTE: Now, you can use pretty url for your awesome project :) *****
--------------------------------------------------
(Laragon) Project path: E:/adongstack/company/php/laragon/www/laravel
(Laragon) Pretty url: http://laravel.test

這裡還要Largon提供更好的URL訪問效果:http://laravel.test。這些都是自帶的規則。

Could not find package laravel-laravel with stability stable

個人在單獨使用Composer部署的時候遇到了下面的報錯情況:

Creating a "laravel/laravel" project at "./test"

In CreateProjectCommand.php line 424:

  Could not find package laravel/laravel with stability stable.


create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [<package> [<directory> [<version>]]]

StackFlowCould not find package laravel-laravel with stability stable 其中給出的提示為需要使用下面的命令:

composer create-project --prefer-dist laravel/laravel test

這裡提到了It's not laravel-laravel, it's laravel/laravel. ,需要注意專案的名字不要寫錯,最安全的方式是複製專案名稱。

然而個人在這樣處理之後依然報錯,之後找到了這篇帖子嘗試修復:

https://blog.csdn.net/weixin_42014858/article/details/113312698

個人經過排查之後發現問題出在 Composer映象倉庫問題,國內的映象目前普遍是存在問題的,所以我們需要把映象切換回國外(PHP在國內現在確實一潭死水)。

之後問題迎刃而解:

composer config -g repo.packagist composer https://packagist.org

然後繼續使用這個命令:

composer create-project --prefer-dist laravel/laravel test

擴充套件:Php的Debug技巧

第一種是常用的PHP除錯方法:var_dump(),但是預設直接呼叫的方式可讀性較差,個人對於PHP不熟悉,於是果斷找谷大神搜了一波php pretty var_dump找到下面這篇實用的文章。[

這篇文章來自強大的 StackFlow

[https://stackoverflow.com/que...
](https://stackoverflow.com/que...)

第一種方法適合喜歡複製/貼上程式碼的:

echo '<pre>' . var_export($data, true) . '</pre>';

第二種方法可以給部分內容實現高亮:

highlight_string("<?php\n\$data =\n" . var_export($data, true) . ";\n?>");

當然還有其他人給出了更簡潔的寫法。效果是差不多的:

var_dump(highlight_string("<?\n". var_export($data, true)));

簡潔寫法

第三種方法適合使用原汁原味的var_dump的開發人員,可以利用<pre>標籤自帶的print_r()方法最佳化:

echo '<pre>';
var_dump($data);
echo '</pre>';
Note that echovar_export, and highlight_string are all php functions and need to be inside a <?php ?> block.
注意要解除安裝<?php ... ?>這樣的程式碼塊內才可以生效。

順帶放一手老外的吐槽:

Damn! 15 years I've been working with PHP and I'm only seeing this now???

如果讀者對此感興趣,下面是可以直接複製貼上到 public\index.php 進行除錯檢視Kernel內部熟悉的方法:

// 第一種方法適合喜歡複製/貼上程式碼的
// echo '<pre>' . var_export($kernel, true) . '</pre>';

// 第二種方法:內容高亮
//highlight_string("<?php\n\$data =\n" . var_export($kernel, true) . ";\n?>");

// 第三種方法:
// echo '<pre>';
// var_dump($kernel);
// echo '</pre>';

總結

Largon使用十分簡單,Laravel的專案在Largon中部署也更為簡單。

相關文章