aravel是一款設計簡潔、優雅的Web開發框架,受益于PHP的眾多新特性, Laravel可以幫助開發者快速構建RESTful風格的API,因此在國外開發者中非常流行。
筆者之前一直用C++做底層開發,在開始Web開發旅途的時候接觸到了Laravel,使用之后感覺就像發現了新大陸,對其中的快速構建能力驚奇不已。盡管Laravel的文檔非常詳細,但源碼才是最好的文檔,Laravel的框架中運用了諸多設計模式,這也是Laravel能夠寫出如此優雅的代碼的原因。
Laravel擁有非常活躍的社區,同時提供了非常豐富的開源組件,讓開發者在實際開發中如虎添翼。
原創微信公眾號:臥龍會IT技術。閑言碎語不用講,說一說好漢Laravel,今天為大家演示如何用Laravel快速部署一個簡單的后臺程序。
一、創建工程
環境搭建可以參照文末的相關章節,這里不詳細闡述。首先開始創建我們的Laravel空白項目。
新建工作目錄,選在D盤的work目錄:
切換到work目錄下,執行composer命令:
composer create-project laravel/laravel yourProjectName
如果一切正常,work目錄下就會生成一個空的Laravel項目。目錄結構如下:
稍作解釋:
app是我們寫自己代碼的地方,包含了應用的核心代碼;
bootstrap目錄包含了少許文件用于框架的啟動和自動載入配置,還有一個cache文件夾用于包含框架生成的啟動文件以提高性能;
config目錄包含了應用所有的配置文件;
database目錄包含了數據遷移及填充文件,如果你喜歡的話還可以將其作為SQLite數據庫存放目錄;
public目錄包含了前端控制器和資源文件(圖片、js、css等);
resources目錄包含了視圖文件及原生資源文件(LESS、SASS、CoffeeScript),以及本地化文件;
storage目錄包含了編譯過的Blade模板、基于文件的session、文件緩存,以及其它由框架生成的文件,該文件夾被隔離成app、framework和logs目錄,app目錄用于存放應用要使用的文件,framework目錄用于存放框架生成的文件和緩存,最后,logs目錄包含應用的日志文件;
tests目錄包含自動化測試,其中已經提供了一個開箱即用的PHPUnit示例;
vendor目錄包含Composer依賴;
其實這時候就可以分析Laravel源碼了,我分析源碼的習慣是先分析軟件的生命周期,有個全局的概念,然后再一個模塊一個模塊的去分析。本文的重點不在這里,我們這里不過多介紹。
二、數據庫配置:
在L.env中修改數據庫相關鏈接信息,否則有些組件包會安裝失敗.
三、組件安裝
從碼云下載開發api后臺常用的函數組件包,我自己寫的,用起來方便不少,一些常用的操作不需要重復開發:
進入 我們的工程目錄 并clone下來我的庫https://git.oschina.net/duyisu/tiger.git,
然后安裝后臺開發必要的組件,包括(在根目錄(laraveltest)底下直接執行下列命令)
composer require dingo/api 1.0.x@devcomposer require damian-nz/l5-swagger dev-mastercomposer require encore/laravel-admin "1.4.*"composer require tymon/jwt-auth "^0.5.11"composer require toplan/laravel-sms ~2.5composer require endroid/qrcode ^1.9
composer require zizaco/entrust 5.2.x-dev
稍作解釋
Dingo/api是用來開發api的組件包
Damian-nz/l5-swagger是用來自動生成api在線文檔的組件包
Encore/aravel-admin用來快速開發管理后臺
Tymon/jwt-auth 用戶授權驗證組件包
Toplan/laravel-sms短信驗證
Endroid/qrcode 二維碼生成
Tiger組件包需要手動修改依賴文件
在根目錄下修改composer.json,將"Tiger\Api\": "app/tiger/api/src/"添加到psr-4:還用到一個幫助文件, "psr-4": { "App\": "app/", "Tiger\Api\": "app/tiger/api/src/" }
原創微信公眾號:臥龍會IT技術
接下來把provider添加到config目錄下的app.php內的的provider數組
Dingo\Api\Provider\LaravelServiceProvider::class,Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class,Tiger\Api\Providers\TigerApiServerProvider::class,L5Swagger\L5SwaggerServiceProvider::class,Encore\Admin\Providers\AdminServiceProvider::class,Zizaco\Entrust\EntrustServiceProvider::class,Toplan\PhpSms\PhpSmsServiceProvider::class,Toplan\Sms\SmsManagerServiceProvider::class,
'PhpSms'=> Toplan\PhpSms\Facades\Sms::class,'SmsManager'=> Toplan\Sms\Facades\SmsManager::class,
資源文件發布
php artisan vendor:publish --provider="Toplan\PhpSms\PhpSmsServiceProvider"php artisan vendor:publish --provider="Toplan\Sms\SmsManagerServiceProvider"
php artisan l5-swagger:publish
composer dump-autoload
php artisan vendor:publish
其他必要的操作
.env增加API_STANDARDS_TREE=vndAPI_PREFIX=apiAPI_VERSION=v1API_DEBUG=true
修改api在線文檔路由
修改config目錄下l5-swagger.php 'routes'=> [ 'docs'=> 'docs', ],
'paths'=> [
'excludes'=> [base_path('app/tiger/api')],
], 'generate_always'=> env('L5_SWAGGER_GENERATE_ALWAYS', true), '
添加中間件
'jwt.auth'=> \Tymon\JWTAuth\Middleware\GetUserFromToken::class,增加到kenel.php中的 $routeMiddleware數據中
修改默認的用戶認證model為Profile
修改config/auth.php 'providers'=> [ 'users'=> [ 'driver'=> 'eloquent', 'model'=> App\Models\Profile::class, 'table'=> 'profile', ],
修改jwt.php 'user'=> 'App\Models\Profile',
下面一步是設置時區,到config/app.php文件下修改時區。
'timezone'=> 'Asia/Shanghai',
四、代碼自動生成
接下來后臺代碼可以自動生成了:
創建用戶認證相關控制器,路由 這個功能依賴于我自己寫的tiger組件包 php artisan api:make-auth-controller UserController
Api接口相關的模型控制器 這個功能依賴于我自己寫的tiger組件包 php artisan api:make-controller User
安裝后臺管理相關的路由
后臺管理 laravel-admin包的命令行功能,可以快速生成后臺php artisan admin:make UserController --model=App\Models\User
上面的命令執行完成后,
然后修改對用的controller的代碼,完成軟件邏輯的部分。
必須要在app\Admin\routes.php里面添加路由.
至此,app后臺基本框架已經完成。
在線api文檔生成的路徑是yourdomain/api-docs
后臺api訪問路徑yourdomain/api/xxx
后臺管理訪問路徑yourdomain/admin 用戶名:admin 密碼:admin
五、環境搭建
開發環境在windows下開發,安裝wamp一鍵安裝包即可,自己百度。
生產環境是unbunbo,環境的搭建參考這篇博文
http://www.blog8090.com/ubuntu-xia-php7-mysql5-7-lnmp-huan-jing-da-jian/
可能會踩坑的地方是:
1.mysql安裝0.5.3的源會失敗,換成0.8.1的就沒有問題
2.配置nginx老是不成功,原來是和自帶的apache沖突,卸載掉apache在裝nginx
sudo apt-get remove apache*
安裝composer依賴管理工具,官網下載即可,支持windows一鍵安裝。
有時候安裝了composer不能正常使用,有可能是環境變量問題,解決方案:composer環境變量問題:在命令行里執行
composer config -l -g
在輸出的結果中,其中的 【home】 配置項內容就是了composer的主目錄,然后進入vendor\bin,將這個路徑加入環境變量。從上面的報錯信息里可以看出,你用來初始化項目的vendor\bin是C:\Users\yanwushu\vendor\bin,你需要確定這個路徑是composer的主目錄,且下面的vendor\bin存在。建議執行一下我上面說的方法,查看一下路徑,然后添加正確路徑到環境變量。
雖然packagist會有點卡,但是也不推薦使用composer中文鏡像,否則下載的包有可能不是最新的,各種問題會出現。
文|原創:阡陌網絡
更多精彩,專注IT技術,請關注
微信公眾號:臥龍會IT技術
有大神直播免費公益課!趕快來與臥龍會大神互動
------歡迎大家分享原文到朋友圈,微信群,QQ群等!本文由臥龍會團隊成員阡陌網絡原創,請勿抄襲,轉載,轉載聯系臥龍會進行授權,否則追究法律責任。
個服務器不能配置多個子域名的時候很是尷尬,無法使用虛擬目錄,只能通過二級目錄訪問。在根目錄/data/wwwroot/default部署了多個laravel應用,laravel1,-laravel2...,然后按文檔配置所謂的優雅鏈接,遇到了諸多問題:
Apache服務器
在lamp環境下使用還是蠻簡單,配置Laravel/public/.htaccess:
Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L]
即可,訪問的地址:
http://test.comlaravel1/public/admin/index
http://test.com/laravel2/public/admin/index
nginx服務器
文檔中說,只要在nginx.conf下配置:
location / { try_files $uri $uri/ /index.php?$query_string; }
即可,訪問優雅鏈接,但結果有點失望,你會遇到問題:
歸根結底是nginx.conf配置問題,本人遇到最多就是Access denied,因為使用OneinStack自動部署lnmp環境,nginx.conf已經默認配置了,結果仔細對比,少了下面配置
fastcgi_split_path_info ^(.+\.php)(.*)$;
參考:https://segmentfault.com/a/1190000002667095
難怪laravel優雅鏈接index.php后面一直無法訪問,目前為題已解決,附上一段網上的配置:
server { listen 80; server_name _; set $root_path '/data/www/default'; root $root_path; index index.php index.html index.htm; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~ \.php { fastcgi_pass 127.0.0.1:9000; fastcgi_index /index.php; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } }
http://test.com/laravel1/public/index.php/admin/index
http://test.com/laravel2/public/index.php/admin/index
都可以正常訪問了,OK!
最后隱藏index.php
雖然上述配置在laravel中可以正常訪問,但是一些放在public里面的靜態資源可能無法訪問,比如無法使用asset()函數時,路徑中就包含index.php導致資源無法加載,所以建議隱藏index.php
if (!-e $request_filename) { rewrite ^/(.*)/public/(.*)$ /$1/public/index.php/$2 last; break; }
http://test.com/laravel1/public/admin/index
http://test.com/laravel2/public/admin/index
以上就無需加index.php,即可正常訪問
https://www.phpcomposer.com/
https://docs.phpcomposer.com/00-intro.html
composer create-project laravel/laravel 安裝目錄
cd 安裝目錄
php artisan serve
就會顯示出一個地址,你在瀏覽器中輸入這個地址和端口能看到laravel輸出內容
這里還需要配置前端的知識,這里有一個webpack.mix.js,這個是一個簡單的webpack配置,webpack簡單點說就是一個前端的打包工具,可以把js和css進行代碼壓縮,我們在這里只要在新的dos窗口中運行npm install進行安裝
安裝完后運行npm run watch就可以看到系統會自動把js進行打包了,此時,如果js或者css有修改,則會自動打包到public相應的目錄下。這里的話,還是希望大家可以去看一下webpack的入門,了解下就行了,如果你不想學,也可以不用這個,去手動寫js和css文件。
https://www.bootcss.com/
在這里下載你想使用的bootstrap版本,并放入到laravel的public目錄里就可以在模板中進行使用了,public相當于公共目錄,所有的網頁都能進行引入,還有一個storage目錄,我們可以使用php artisan storage:link進行關聯,我們后面慢慢講解具體的內容!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。