Laravel工作坊Day1
Day1
Day2 筆記 : 20200710-17_Laravel 工作坊
對應講義 : [20200710-1環境安裝與建置.pdf](https://www.dropbox.com/s/6ej3vfis6woatnn/20200710-1%E7%92%B0%E5%A2%83%E5%AE%89%E8%A3%9D%E8%88%87%E5%BB%BA%E7%BD%AE.pdf?dl=0)
網站環境建置組合:
是Web application stacks的一種,也就是一組綁在一起來運行動態網站或伺服器的開源軟體。
架構:作業系統(operating system)、網頁伺服器(web server)、資料庫伺服器(database server)、程式語言(programming language)。
常見開源軟體種類:
- LAMP (Linux + Apache + MySQL + PHP)
- WAMP (Windows + Apache + MySQL + PHP)
- MAMP (Mac OS + Apache + MySQL + PHP)
PHP、Apache、資料庫伺服器合作原理 :
HTTP 狀態碼
使用者透過PHP存取資料庫伺服器內容的流程:
- 1.使用者向Apache要求PHP相關網頁(.php)。
- 2.當Apache收到這個要求,經判斷,把此要求轉交給PHP直譯器負責。
- 3.PHP直譯器解譯此網頁的PHP語法,當遇到資料庫相關的函式,則把Request間接傳遞給資料庫伺服器。
- 4.資料庫伺服器把所要求的結果反傳回PHP 。
- 5.PHP直譯器把此結果包裝成Apache看得懂的HTML語法,後傳回給Apache。
- 6.Apache把此結果(已被PHP處理成HTML)傳回給使用者的browser。
Laravel 運行環境與建置需要 :
- 運行環境 : 網頁伺服器、PHP直譯器、資料庫
- 開發工具 : 程式編輯器、版本控制系統、指令執行工具、資料庫操作 adminer
免安裝可攜的 Laravel 開發環境 : wagon
wagon 整合了 cmder、git、UwAmp、composer
cmder為PHP CLI (PHP Command line interface)
Cmder 的使用 :
git 為版本控制系統 UwAmp 開啟Apache與MySQL服務及設定PHP Version composer為PHP的套件管理工具
進入PHPMyAdmin :
(1) 在網址列輸入 /mysql (2) 在 UwAmp 介面上Tools 點 PHPMyAdmin
登入PHPMyAdmin :
- 輸入伺服器的主機位址:連接埠(hostname:port)
- 輸入帳號、密碼
- 輸入資料庫名稱
換成wagon 1.5.1 , 因為PHP為7.3版
( 藍色框框:說明帳號、密碼預設都為root ,下面可修改帳密)
程式編輯器軟體: PhpStorm
內建很好的PHP IDE
後端語言的套件管理工具 :
- Node.js : npm、Yarn
- Ruby : gem
- PHP : Composer、Pear、Pecl
語意化版本(Semantic Versioning) :
X(主版號).Y(次版號).Z(修訂號) 版號遞增規則如下: * 主版號:當你做了不相容的 API 修改 * 次版號:當你做了向下相容的功能性新增 * 修訂號:當你做了向下相容的問題修正
版本號演進 :
至於 Laravel 的版本號沒有遵循上面是因為,作者前面沒有按照語意化版本的規則排,換版的時候也比較不會在乎更新維護上的差別,後來有按照規則跑,後面頂多就只有小編號跟修正號的差異而已,不會到有以前換號就像是重大更新那樣,所以他才會把小編號開始的數字直接省略為’X’,因為在使用說明上同一版本不會有太大影響。
PHP推薦標準 : PHP-FIG
- PSR標準規範: 目前最新為PSR-4
PHP的套件管理中心 : Packagist
對應講義 : [20200710-2初階版本管理.pdf](https://www.dropbox.com/s/7viugctbkxa2rkx/20200710-2%E5%88%9D%E9%9A%8E%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86.pdf?dl=0)
防止防火牆阻擋 :
剛開始用PhpStorm時,點Event Log之後出現的視窗,按Fix..來防止防火牆阻擋
按 Configure Automatically按鈕,就完成了
設定git.exe路徑 :
git/ cmd下的 git.exe
選擇完git路徑後,按 Test 按鈕,成功則會出現版本號
初始化專案 (git init):
在左下角出現綠色框框訊息, 顯示 Created Git repository in 目前專案位置
這為 PhpStorm 內建的 git 介面 :
勾選 Use non-modal commit interface後,視窗會釘選在左邊
沒勾選,則出現在下面Git那的 Local Changes
這種git的操作比較麻煩,建議是放在左邊
git add :
勾選動作為 git add
git commit -m ‘訊息’ :
輸入Commit Message後, 按Commit 按鈕,完成git commit 動作
Log:all視窗 :
在這,看到剛剛commit上去的紀錄
git log : 查看commit紀錄
git status : 查詢當前狀態
git commit 後,檔案上的列數旁顏色變化說明 :
- 綠色 : 新增
- 藍色 : 修改
- 灰色箭頭 : 刪除
git diff :
看 git commit 前後的差異
Log:all視窗中,點選一筆commit紀錄後,右邊會出現檔案及commit message,點擊檔案2下後,則會開新視窗,就可以達到上方畫面效果
show History :
可查看多筆 git commit 完成的差異
中階版本管理 : [20190125-2中階版本管理.pdf](https://www.dropbox.com/s/7viugctbkxa2rkx/20200710-2%E5%88%9D%E9%9A%8E%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86.pdf?dl=0)
對應講義 : 20200710-4_Route 與 Controller.pdf
Route :
在 routes 資料夾下,選擇 web.php #因為應用於網頁
紅色框框為 Route::get() 對應的 PHP 語法
設定 Router 動作 :
HTTP request method : get
get方法的參數意義,Route::get(‘網址’,’反應’)
設定 Router 反應 :
PHP的 Http request methods 呈現方式
反應 :
- 回傳字串
EX-1 :
在本機 (http://localhost:8000/) 下
EX-2:
在/hello (http://localhost:8000/hello) 下
EX-3:
在/hello/index (http://localhost:8000/hello/index) 下
反應 :
- 回傳 view
跳至XXX.blade.php (MVC架構的V:View) (XXX.blade.php來自於resources/views下)
EX-1:
在本機 (http://localhost:8000/)下,跳至 welcome.blade.php
EX-2:
在/hello (http://localhost:8000/hello)下,跳至 hello.blade.php
EX-3:
在/hello/index (http://localhost:8000/hello/index)下,跳至 index.blade.php
反應 :
- 跳轉頁面
EX:
routes/web.php
app/Http/Controllers/AlinkController.php
噴錯誤 :
改善方法 :
to() 方法 :
dd() 函式 : 是開發過程中最常用的函式之一,可以印出送入的參數,並且暫停程式。
redirect後接的方法
Router 接收參數 :
接收選擇性參數 :
- 自行輸入參數 :
輸入 shengyou
- 沒有輸入參數 :
name變數值,預設為Everybody
Laravel 的 MVC 分工 :
MVC 架構演進 — 為什麼需要MVC
Controller :
避免都把程式邏輯寫在routes/web.php,太長也沒有分類, 所以利用 Controller檔來控制 Router(路徑), 由他的method 來處理查詢(Model)、回傳頁面(View)、跳轉頁面(Redirect)。
產生 Controller 檔 :
artisan make:controller
Cmder 輸入 : artisan make:controller {nameController}
成功建立 HomeController檔後,出現在 app/Http/Controllers 下
RESTful :
- 簡單來說就是一個Http request method使用API的協定及回傳格式制式化,讓其他工程師維護的話能快速看懂某支API的用途,由工程師之間互相約定好的道德標準,讓程式碼維護起來會快速、方便、簡潔。
在發送 Http request 時通常都是使用 get 、 post 這兩種,但在 RESTful 協定下多了 put、patch、delete 這些method,主要是為了開發、維護方便及清楚。
在有遵守的狀況下,網址會是以下範例:
http://localhost/delete/5
這行清楚顯示,這是負責某資料刪除的API
http://localhost/patch
這行清楚顯示,這是負責修改資料的API
但實際上在運作 : get和delete還是使用get來傳遞參數(從網址),而其他的method還是使用post來傳遞參數(從request body)
RESTful API講義 : 20190719-1_RESTful API.pdf
將 Route 指向 Controller :
HTTP介紹 : 20190718-2_HTTP.pdf
示範步驟流程 (get 為例) :
在 web.php 的 get方法裡,第2個參數的 function 區塊剪下
貼至 HomeController.php 的 Class 裡
補上 function 名稱後,在 function 前加上 public
之後回到 web.php 頁面,get方法的第二個參數要補上東西
輸入對應的 Controller檔@function name
完成在本機下,呈現的頁面(view) 為welcome.blade.php
設定4個Http request methods(get、post、patch、delete) 範例 :
Module :
module 連資料庫
在 database/migrations 下
詳細操作可參考 : Laravel 5.8 會員註冊及登入系統API:Model & Controller
對應講義 : [20200710-3初始 Laravel 專案.pdf](https://www.dropbox.com/s/l5af955ybb1df27/20200710-3%E5%88%9D%E5%A7%8B%20Laravel%20%E5%B0%88%E6%A1%88.pdf?dl=0)
開啟wagon的Web預設畫面 :
修改wagon的Web預設畫面 :
調整完,Apache Server會暫停
啟動完,就可看到firstproject專案的 Web
成功安裝Composer :
輸入composer指令後,會出現composer版本號
用 Composer 建立 laravel 專案 skeleton :
輸入 composer create-project laravel/laravel {專案名稱} –prefer-dist
安裝完畢
composer 的 create-project指令後的參數說明 :
使用 Laravel 的 Documnet Root :
要指向 /public
Laravel 框架的Route才啟動成功
public 資料夾 :
(重點) Laravel 目錄結構 :
修改預設的Laravel框架Web :
composer.json
屬性值的意義
查看Laravel的版本號
(1) Cmder下輸入 artisan (artisan –version)
(2)在 composer.json 下的 require 屬性裡的 laravel/framework
使用laravel其他的版本號 :
假如要使用6.0
Cmder下輸入 composer update
composer.lock
.json和.lock差別 :
功用 :
比較 :
namespace
- 解決不同人(或者是資料夾)使用同樣名稱的類別(Class)
EX: 取名一個叫做 Toy 的空間,在 namespace 後面的 Class 都將會被歸類在 Toy 底下
匯入namespace,使用use語法 : use namespace \ Class name
小提醒 :
使符號閱讀性高、人性化的方法, 勾選 Enable font ligatures
符號閱讀性高、人性化的種類 :
結果 :
Laravel 裡建立 Class :
規則:
- 為 namespace 建立一個 以他為名的資料夾
- 使用 namespace 的檔案,檔案命名為 Class 的名稱
- namespace 裡的 Class 檔案,放至他的資料夾下
示範流程 :
使用 namespace 的 Class name 為 Car ( Class name 的開頭必須為大寫)
修改檔案名稱
修改完後,在Car.php 旁會出現藍色圓圈的C, 代表這檔案為Class (類別 )
namespace 為 Toy,所以新增以 Toy 為名的資料夾
之後在把 Car.php 移至 Toy 資料夾下
這樣也使 use 後的路徑,比較直覺
PHP-FIG 制定的套件開發標準 : PSR-4
在 PSR-4 的 Autoloader 規格中,會自動載入 namespace
在composer.json中有PSR-4規格
Laravel 專屬的指令列工具 : artisan
輸入 artisan 指令,顯示Laravel框架的版本號及 artisan 可用的指令
假如每個專案內的Laravel版本號不同,就會有不同的artisan
對應講義 : 20200710-5_Blade 樣板引擎.pdf
義大利麵( 米粉 ) 程式碼
Laravel 的 MVC 之 View 是甚麼:
Laravel 的樣板引擎 :
啟動 Blade 解析器 :
常見的網頁排版 :
方便管理網頁共用問題 :
- 利用 Blade 語法
示範流程 (以 Blog Home 為例 ) :
搜尋 startbootstrap : startbootstrap-Blog,進去 Blog Home 裡面 按 Free Download 下載,或是直接點擊下方練習素材
練習素材:
下載完 Blog Home後,解壓開啟他的資料夾
把 css 相關的丟至 blog 專案下的 public/css 下
- \css
- \vendor\bootstrap\css
把 js 相關的丟至 blog 專案下的 public/js 下
- \vendor\bootstrap\js
- \vendor\jquery
public/css;public/js 完成畫面 :
在 resources/views 下 新增 blog 資料夾
把 index.html 丟至 blog 資料夾下後
改名成 index.blade.php
在 /hello/index 下,畫面連至 blog/index.blade.php
在 /hello/index (http://localhost:8000/hello/index)下的畫面 :
解決css、js 沒吃到問題 : asset()
asset()是Laravel helpers函數,其功能就是導向專案資料夾public
簡化PHP標籤及一些語法
小提醒 :
會跟 Vue(前端JS框架)顯示語法衝到,可以利用 @ 跳脫
<h1>Laravel</h1> 在 HTML 中 --}}
Hello, @.
原本 :
<link rel="stylesheet" href="<?php echo asset('css/app.css') ?>">
使用 :
<link rel="stylesheet" href="">
- 原先 css 路徑 :
使用 asset() 語法修法 css path :
- 原先 js 路徑 :
使用 asset() 語法修法 js path :
吃到 css 及 js 完成畫面 :
開始拆解區塊 :
在 resources/views 下 新增 layouts 資料夾
再 layouts 資料夾下,新增 partials 資料夾
拆解 Navigation 區塊 :
- 在 partials 資料夾下,新增 navigation.blade.php
- 在 blog/index.blade.php 裡, 把 Navigation 區塊剪下至 navigation.blade.php
完成畫面 :
拆解 Footer 區塊 :
- 在 partials 資料夾下,新增 footer.blade.php
- 在 blog/index.blade.php 裡, 把 Footer 區塊剪下至 footer.blade.php
完成畫面 :
拆解 Sidebar 區塊 :
- 在 partials 資料夾下,新增 sidebar.blade.php
- 在 blog/index.blade.php 裡, 把 Sidebar 區塊(紅色框框)剪下至 sidebar.blade.php
完成畫面 :
Blade 樣板引擎 :
在 layouts 資料夾下,新增 master.blade.php,
master.blade.php 為 父view (子views繼承來自他)
master.blade.php 的檔案階層跟 partials 一樣
把 blog/index.blade.php 內容剪下至 master.blade.php
使用 @include 引入view :
- navigation.blade.php
- footer.blade.php
把這段剪下,貼至 blog/index.blade.php
畫面 :
使用 @yield 用來顯示給定區塊的內容 :
在 master.blade.php 輸入 @yield
使用 @extends 指定子頁面應該「繼承」哪一個view :
在 blog/index.blade.php下,輸入 @extends
在 Page Content 區塊加入 sidebar.blade.php
使用 @section 定義內容區塊 :
在 Page Content 區塊 前後 加入@section
結果畫面 :
show.blade.php
把 index.blade.php 內容複製
貼上後,修改 @section 與 @endsection 中間的內容,改為 SHOW!!!
在 /hello/show (http://localhost:8000/hello/index) 下 的 Route,指向 show.blade.php 頁面
畫面 :
最終結果檔:
作業要求 :
(圖片要修改)
利用 Blade 樣板引擎,製作
- /
- /blog
- /blog/{id}
參考資料 :
- Web application stacks
- PHP、Apache、MySQL合作原理
- wagon介紹
- 安裝/設定 PhpStorm
- 語意化版本
- Laravel 文件瀏覽器
- 修改 Laravel 版本號
- Laravel 5.8 會員註冊及登入系統API:Model & Controller
- Laravel Helpers-dd()
- Composer 從入門到實戰
- 20190718-1_Composer 套件管理.pdf
- php – namespace 命名空間教學介紹
- asset 語法與 介紹
- Laravel 5.2 Blade 樣板引擎語法介紹
- Laravel 5.7 Views and Blade