目錄
安裝
注意事項
mac的設定環境變量方法
什麼是composer?
安裝composer
使用composer方式部署laravel項目
laravel的目錄結構
啟動方式
Apache配置虛拟主機,關于403問題的解決
Laravel入門使用(路由)
1 路由配置檔案
2 routes/web.php配置檔案中配置路由(重點)
3 路由參數
4 路由别名
5 路由群組(了解)
控制器
1 控制器檔案在哪?
2 控制器檔案如何命名?
3 結構代碼如何書寫?
4 控制器路由
5 控制器分目錄管理
接收使用者輸入
控制器
模型
視圖
MVC https://www.bilibili.com/video/BV1kE411Z79P
官網: https://laravel.com/
中文官網: http://www.golaravel.com/
中文社群: https://laravel-china.orgl
大部分架構的公共特點
- 單入口
- MVC的思想
- ORM操作資料庫(Object Relations Model)對象關系映射/模型
安裝
注意事項
安裝好php之後需要将php.exe的位置的目錄添加到環境變量中去
確定添加到環境變量之後,能通過指令"php -v"運作得到的結果中的PHP版本号與實際運作的版本号一緻(phpinfo())
mac的設定環境變量方法
編輯".zshrc"檔案,加入:
export PATH=/Applications/XAMPP/xamppfiles/bin:$PATH:.
什麼是composer?
可以看作是軟體管家,
如上圖,composer可以去packagist應用市場裡邊下載下傳軟體,但是該市場隻給傳回軟體的位址,對應的軟體都是在github裡邊存儲的,最終下載下傳的軟體是從github傳回的。
https://packagist.org
安裝composer
https://pkg.phpcomposer.com
使用composer方式部署laravel項目
第一步:切換鏡像
這裡使用阿裡的鏡像 使用阿裡雲composer鏡像為國内composer加速
所有項目都會使用該鏡像位址:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消配置還原到預設的位址:
composer config -g --unset repos.packagist
第二步:composer部署laravel項目【重點】
composer create-project laravel/laravel --prefer-dist ./
指令解釋:
composer :表示執行composer程式
create-project :通過composer去建立項目
laravel/laravel :需要建立的項目名稱
--prefer-dist :優先下載下傳壓縮包方式,而不是直接從github.上下載下傳源碼(克隆)
./ :表示建立的項目目錄名稱,也可以是一個目錄名
比如建立一個名為shop的laravel項目
#composer create-project laravel/laravel --prefer-dist shop
注意,如果要下載下傳其他版本,比如5.4版本中最新小版本号,可以使用這個指令
composer create-project laravel/laravel=5.4.* --prefer-dist edu
composer更新 #composer self-update
laravel的目錄結構
1. app目錄:項目的核心目錄,存放核心代碼,控制器、模型
2. bootstrap目錄:laravel啟動目錄
3. config目錄:項目的配置目錄,
App.php: 項目主要配置檔案;
Auth.php: 用于定義使用者認證(登入)的配置檔案;
Database.php: 針對資料庫的配置;
Filesystems.php: 上傳檔案、 檔案存儲需要使用到的配置檔案;
4. database目錄:資料遷移目錄
以前建立資料表都是通過SQL語句
現在是通過類,稱為遷移檔案【建立資料表的類檔案】,
5. public目錄,項目的入口檔案和系統的靜态資源目錄
6. resource目錄,存放視圖檔案,還有就是語言封包件的目錄
Lang目錄:語言包目錄(如果項目需要本地化則需要配置語言包)
Views目錄:視圖檔案存儲目錄(視圖檔案也可以分目錄管理)
7. routes目錄:定義路由的目錄,web.php是定義路由的檔案
8. storage目錄:主要是存放緩存檔案和日志檔案,注意,如果在linux 環境下,該目錄需要有可寫權限。(後期使用者上傳檔案如果存在本地則也在storage下)
app目錄,存放使用者上傳檔案
Framework:架構運作時的緩存檔案
Logs:日志目錄
9. vendor目錄:主要是存放第三方的類庫檔案,laravel 思想主要是共同的開發,不要重複的造輪子(例如,裡面可能存在驗證碼類,上傳類,郵件類),該目錄還存放laravel架構的源碼。注意如果要使用composer軟體管理的,composer 下載下傳的類庫都是存放在該目錄下面的。
10. .env檔案:主要是設定一些系統相關的環境配置檔案資訊。config 目錄裡面的檔案配置内容一般都是讀取該檔案 裡面的配置資訊(config 裡面的配置項的值基本都是來自.env檔案)。
11. artisan腳手架檔案,主要用于生成代碼的(自動生成),比如生成控制器,模型檔案等。
#php artisan 需要執行的指令
要求1:php必須添加環境變量
要求2:artisan必須存放在指令行目前的工作路徑下
artisan就是一個php檔案,可以用編輯器打開看看
12. composer.json依賴包配置檔案
聲明目前需要的軟體依賴,但是不能删除,composer需要使用。
啟動方式
方式一:指令方式
#php artisan serve
這種啟動方式後,如果修改了項目的配置.env檔案的話,則需要重新啟動才會生效。
方式二:apache方式
虛拟主機配置:(虛拟主機 != 虛拟機)
apache開啟vhost
修改apache的虛拟主機配置檔案vhost檔案
<VirtualHost *:80>
#配置站點管理者的郵箱,當站點産生500錯誤的時候會顯示在頁面上
ServerAdmin [email protected]
#站點的根目錄
DocumentRoot "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public"
#站點需要綁定的域名
ServerName www.zd.cn
#伺服器的别名的域名
ServerAlias zd.cn
<Directory "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public">
allow from all
AllowOverride all
Options +indexes
</Directory>
#Options -indexes #不允許通路目錄結構,部署的時候要這樣
</VirtualHost>
修改hosts檔案(線上叫DNS域名解析)
windows指令檢視hosts檔案 #drivers
在etc目錄中
Mac這裡使用 Gas Mask
Apache配置虛拟主機,關于403問題的解決
出現這個問題的原因是目錄通路權限沒有設定
具體解決步驟如下:
1 打開apache配置檔案httpd.conf, 找到目錄權限的語句
<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>
2 将以上語句複制到配置虛拟主機的檔案中,具體如下:
<VirtualHost *:80>
#配置站點管理者的郵箱,當站點産生500錯誤的時候會顯示在頁面上
ServerAdmin [email protected]
#站點的根目錄
DocumentRoot "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public"
#站點需要綁定的域名
ServerName www.zd.cn
#伺服器的别名的域名
ServerAlias zd.cn
<Directory "/Applications/XAMPP/htdocs/larDemo/myFirstApp/public">
Options FollowSymLinks
AllowOverride All
Order deny,allow
Require all granted
</Directory>
</VirtualHost>
還有一個步驟給storage權限
chmod -R 777 storage
Laravel入門使用(路由)
什麼是路由:将使用者的請求按照事先規劃的方案送出給指定的控制器或者功能函數來進行處理. 【通俗的講,路由就是通路位址形式】
1 路由配置檔案
routes/web.php
2 routes/web.php配置檔案中配置路由(重點)
Route::請求方式('請求的URL' , 匿名函數 或 控制響應的方法)
比如請求域名下根目錄
Roue::get('/',function(){return 'hello world.'})
函數的傳回值,就是請求的響應。
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
有時候還需要注冊路由響應多個HTTP請求——可以通過match方法來實作。或者用any方法注冊一 個路由來響應所有HTTP請求:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('ff', function () {
//
});
Get表示支援get請求方式的路由;
Post表示支援post請求方式的路由;
Match表示比對固定(自己定義)的請求方式的路由;
Any表示比對任意請求方式的路由;
文法上match比get/post/any多一個參數:
Route::match(比對的請求類型,位址,回調);
比對請求類型要求是數組格式的聲明。
3 路由參數
參數分為必選參數和可選參數
必選參數:“{參數名}”
可選參數:“{參數名?}”
#必選參數
Route::any('test1/{id}', function ($id) {
echo "目前的使用者id是" . $id;
});
#可選參數
Route::any('test2/{id?}', function ($id = '') {
echo "目前的使用者id是" . $id;
});
#通過?形式傳遞get參數
Route::any('/test3', function () { # zd.cn/test3?id=123
echo "目前的使用者id是" . $_GET['id'];
});
4 路由别名
路由别名相當于在路由定義的時候,為路由起了一個别名,在以後的程式中可以通過這個别名來擷取路由的資訊。
#路由别名
Route::any('/test4/asdasdsad/adsadsa', function () { # zd.cn/test3?id=123
echo "目前的使用者id是" . $_GET['id'];
})->name('名字');
調用該路由則可以寫成:route('名字');
檢視系統已經有的路由指令:#php artisan route:list
5 路由群組(了解)
比如背景有如下路由
/admin/login
/admin/logout
/admin/index
/admin/user/add
/admin/user/del
他們的共同點是,都有/admin/字首,為了管理友善,可以把他們放到一個路由分組中。使用prefix屬性指定路由字首。
Route::group(['prefix' => 'admin'], function () {
Route::get('test1', function () {
//比對URL "/admin/test1"
echo 'test1';
});
Route::get('test2', function () {
//比對URL "/admin/test2"
echo 'test2';
});
});
文法: Route::group(公共屬性數組 , 回調函數);
後期還會接觸到middleware屬性。
控制器
1 控制器檔案在哪?
app/Http/Controllers
2 控制器檔案如何命名?
大駝峰的控制器名+Controller.php
3 結構代碼如何書寫?
注意:其控制器基礎結構代碼,不需要自己去手動編寫,可以通過artisan指令行來自動生成。
是以需要記住對應的指令: #php artisan make:controller 控制器名(大駝峰)Controller 關鍵詞
例如:使用artisan指令建立TestController.php檔案
#php artisan make:controller TestController
4 控制器路由
即,如何使用路由規則調用控制器下的方法,而不再走回調函數。
路由設定格式基本相同,隻是将匿名函數換成“控制器類名@方法名”
舊的格式如下:Route::請求方法(路由表達式,控制器@方法)
laravel8格式:Route::get(路由表達式 , [控制器::class, '方法']);
假設調用控制器TestController的start方法
Route::get("/test/t1", [TestController::class, 'start']);
5 控制器分目錄管理
1 建立相關的區分目錄
2 建立控制器檔案
php artisan make:controller Admin/IndexController
php artisan make:controller Home/IndexController
3 編寫測試代碼
public function index()
{
echo '這是Admin分組下的index方法';
}
4 編寫對應路由
Route::get("/admin/index", [App\Http\Controllers\Admin\IndexController::class, 'index']);
Route::get("/home/index", [App\Http\Controllers\Home\IndexController::class, 'index']);
接收使用者輸入
Laravel8好像抛棄了Input類,這裡使用Request類
接收使用者輸入的類: Illuminate\Support\Facades\Request
Facades:“門面”的思想。門面是介于一個類的執行個體化與沒有執行個體化中間的一個狀态。其實是類的一個接口實作。在這個狀态下可以不執行個體化類但是可以調用類中的方法。說白了就是靜态方法。
Request::input('參數的名字','如果參數沒有被傳遞使用該預設值')
Request::all():擷取所有的使用者的輸入,傳回數組
Request::input('name'):擷取單個的使用者的輸入
Request::only(['id','name']):擷取指定的幾個值
Request::except(['id']):擷取除了指定的指,之外的指
Request::has('name'):判斷某個值存在與否(傳回boolean)
上述方法既可以擷取get中的資訊,也可以擷取post中資訊。
在laravel中,如果需要使用facades的話,但是又不想寫那麼長的引用操作:
use Illuminate\Support\Facades\Request
則可以在config/app.php中定義長串的别名(在aliases數組中定義别名):
'aliases' => [
'Request' => Illuminate\Support\Facades\Request::class,
]
laravel中友好輸出函數:dd()
作用:dump+die,後續的代碼不會執行