引言
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
載入過程,也就是框架是如何進行初始化和引導的。
大致的匯入過程如下:
- 表面入口為
public/index.php
,內部程式碼引入了bootstrap
目錄下的app.php
。 - 透過核心的kernel進行引導初始化。
$app->make(Kernel::class)
是核心的啟動方法。- 核心Kernel的主要工作:引導、處理請求、生命週期活動、獲取例項。
- 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>]]]
StackFlow: Could 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 thatecho
,var_export
, andhighlight_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中部署也更為簡單。