--- tags: Laravel入門 --- # 2020/07/10 ## Day1 ### Day2 筆記 : [20200710-17_Laravel 工作坊](https://hackmd.io/593qWvQYQHmaTiCTPw03cA) ------ ### 對應講義 : [20200710-1_環境安裝與建置.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AAC6MiqSP5NPaThj4okBlBH8a/20200710-PHP%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20200710-1_%E7%92%B0%E5%A2%83%E5%AE%89%E8%A3%9D%E8%88%87%E5%BB%BA%E7%BD%AE.pdf&subfolder_nav_tracking=1) ### 網站環境建置組合: 是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、資料庫伺服器合作原理 :  [圖檔](https://www.dropbox.com/home/Laravel?preview=laravel.pptx) #### [HTTP 狀態碼](https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status?fbclid=IwAR3R8ETVWhvmdtc-C13EAmxXtK_BFUJq2u-6IuAXD4IqCk3pNwFHiDiXaB0) 使用者透過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](https://www.dropbox.com/sh/7ire7s50qgaf3qp/AACNIIhKNzEke6H5h_qIYZvma/%E8%BB%9F%E9%AB%94/wagon-release-1.5.0.exe?dl=0) #### wagon 整合了 cmder、git、UwAmp、composer cmder為PHP CLI (PHP Command line interface) ### Cmder 的使用 :  * [UNIX指令](https://cscc.cs.nctu.edu.tw/unix-basic-commands) 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](https://www.dropbox.com/sh/7ire7s50qgaf3qp/AAC-rKG0ZaLbhQe5rdGmPFd5a/%E8%BB%9F%E9%AB%94/PhpStorm-2020.1.2.exe?dl=0) 內建很好的PHP IDE [介紹PhpStorm — 以 Laravel 開發為例](https://medium.com/@shengyou/full-in-love-with-phpstorm-f6d484109978) ### 後端語言的套件管理工具 : * Node.js : npm、Yarn * Ruby : gem * PHP : Composer、Pear、Pecl ### 語意化版本(Semantic Versioning) : X(主版號).Y(次版號).Z(修訂號) 版號遞增規則如下: * 主版號:當你做了不相容的 API 修改 * 次版號:當你做了向下相容的功能性新增 * 修訂號:當你做了向下相容的問題修正 ### 版本號演進 :   至於 Laravel 的版本號沒有遵循上面是因為,作者前面沒有按照語意化版本的規則排,換版的時候也比較不會在乎更新維護上的差別,後來有按照規則跑,後面頂多就只有小編號跟修正號的差異而已,不會到有以前換號就像是重大更新那樣,所以他才會把小編號開始的數字直接省略為'X',因為在使用說明上同一版本不會有太大影響。 ### PHP推薦標準 : [PHP-FIG](https://www.php-fig.org/) * PSR標準規範: 目前最新為PSR-4 ### PHP的套件管理中心 : [Packagist](https://packagist.org/) -------- ### 對應講義 : [20200710-2_初階版本管理.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AAC6MiqSP5NPaThj4okBlBH8a/20200710-PHP%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20200710-2_%E5%88%9D%E9%9A%8E%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86.pdf&subfolder_nav_tracking=1) ### 防止防火牆阻擋 : 剛開始用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/sh/smckyemt1i82les/AABugKXoa_Wdq286zcyIPfwca/20190124_Laravel%E8%AA%B2%E7%A8%8B(%E4%B8%89%E5%A4%A9)/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20190125-2_%E4%B8%AD%E9%9A%8E%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86.pdf&subfolder_nav_tracking=1) ----- ### 對應講義 : [20200710-4_Route 與 Controller.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AAC6MiqSP5NPaThj4okBlBH8a/20200710-PHP%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20200710-4_Route+%E8%88%87+Controller.pdf&subfolder_nav_tracking=1) ### Route : 在 routes 資料夾下,選擇 web.php #因為應用於網頁  紅色框框為 Route::get() 對應的 PHP 語法  ### 設定 Router 動作 :  ### HTTP request method : get get方法的參數意義,Route::get('網址','反應')  ### 設定 Router 反應 :  ### [PHP的 Http request methods 呈現方式](https://www.dropbox.com/sh/smckyemt1i82les/AADoUR6gB6E6Zu7jQe64svUba/20190718_Laravel%20API%E5%8F%8ASSO%E8%AA%B2%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20190718-2_HTTP.pdf&subfolder_nav_tracking=1) #### 反應 : * 回傳字串 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後接的方法](https://stackoverflow.com/questions/28642753/redirect-to-external-url-with-return-in-laravel)  ### Router 接收參數 :  #### 接收選擇性參數 : * 自行輸入參數 : 輸入 shengyou  * 沒有輸入參數 : name變數值,預設為Everybody ### Laravel 的 MVC 分工 :  #### [MVC 架構演進 — 為什麼需要MVC](https://medium.com/@rayshih771012/mvc-%E6%9E%B6%E6%A7%8B%E6%BC%94%E9%80%B2-%E7%82%BA%E4%BB%80%E9%BA%BC%E9%9C%80%E8%A6%81mvc-d1a13aa687a0) ### 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](https://www.dropbox.com/sh/smckyemt1i82les/AADoUR6gB6E6Zu7jQe64svUba/20190718_Laravel%20API%E5%8F%8ASSO%E8%AA%B2%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20190719-1_RESTful+API.pdf&subfolder_nav_tracking=1) ### 將 Route 指向 Controller : #### HTTP介紹 : [20190718-2_HTTP.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AADoUR6gB6E6Zu7jQe64svUba/20190718_Laravel%20API%E5%8F%8ASSO%E8%AA%B2%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20190718-2_HTTP.pdf&subfolder_nav_tracking=1) #### 示範步驟流程 (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](https://ithelp.ithome.com.tw/articles/10226796) ---- ### 對應講義 : [20200710-3_初始 Laravel 專案.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AAC6MiqSP5NPaThj4okBlBH8a/20200710-PHP%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20200710-3_%E5%88%9D%E5%A7%8B+Laravel+%E5%B0%88%E6%A1%88.pdf&subfolder_nav_tracking=1) ### 開啟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](https://docs.laravel-dojo.com/fig-standards/master/PSR-4) 在 PSR-4 的 Autoloader 規格中,會自動載入 namespace [( 詳細 ) PSR-4的自動載入規格](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md) 在composer.json中有PSR-4規格  ### Laravel 專屬的指令列工具 : artisan 輸入 artisan 指令,顯示Laravel框架的版本號及 artisan 可用的指令  假如每個專案內的Laravel版本號不同,就會有不同的artisan  ----- ### 對應講義 : [20200710-5_Blade 樣板引擎.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AAC6MiqSP5NPaThj4okBlBH8a/20200710-PHP%E9%96%8B%E7%99%BC%E6%B5%81%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20200710-5_Blade+%E6%A8%A3%E6%9D%BF%E5%BC%95%E6%93%8E.pdf&subfolder_nav_tracking=1) ### 義大利麵( 米粉 ) 程式碼  ### Laravel 的 MVC 之 View 是甚麼:  ### Laravel 的樣板引擎 :  ### 啟動 Blade 解析器 :  ### 常見的網頁排版 :  ### 方便管理網頁共用問題 : * 利用 Blade 語法 #### 示範流程 (以 Blog Home 為例 ) : 搜尋 startbootstrap : [startbootstrap-Blog](https://startbootstrap.com/templates/),進去 Blog Home 裡面  按 Free Download 下載,或是直接點擊下方練習素材  練習素材: * [Blog Home](https://www.dropbox.com/sh/7ire7s50qgaf3qp/AACOT6_II8sjrQT-gaB9FK6oa/%E7%B7%B4%E7%BF%92%E7%B4%A0%E6%9D%90/startbootstrap-blog-home-gh-pages.zip?dl=0) 下載完 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()](https://laravel.com/docs/7.x/helpers#method-asset) #### asset()是Laravel helpers函數,其功能就是導向專案資料夾public #### {{}} 簡化PHP標籤及一些語法 小提醒 : {{}} 會跟 Vue(前端JS框架)顯示語法衝到,可以利用 @ 跳脫 ``` <h1>Laravel</h1> {{-- 利用 @ 跳脫,Blade 並不會處理這段,而是直接完整顯示 {{ name }} 在 HTML 中 --}} Hello, @{{ name }}. ``` 原本 : ``` <link rel="stylesheet" href="<?php echo asset('css/app.css') ?>"> ``` 使用 {{}} : ``` <link rel="stylesheet" href="{{ asset('css/app.css') }}"> ``` * 原先 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 頁面  畫面 :  ---- 最終結果檔: * [blog.zip](https://www.dropbox.com/sh/7ire7s50qgaf3qp/AACbpAywbsmI_hWvSD5SrX1ta/%E7%AF%84%E4%BE%8B%E6%AA%94?dl=0&preview=blog.zip&subfolder_nav_tracking=1) --- 作業檔 : * [Blog Post](https://www.dropbox.com/sh/7ire7s50qgaf3qp/AABFFKtI1FnyzbQNmyeyFgg7a/%E7%B7%B4%E7%BF%92%E7%B4%A0%E6%9D%90/startbootstrap-blog-post-gh-pages.zip?dl=0) ### 作業要求 :  # (圖片要修改) 利用 Blade 樣板引擎,製作 * / * /blog * /blog/{id} --- ### 參考資料 : * [Web application stacks](https://ithelp.ithome.com.tw/articles/10215686) * [PHP、Apache、MySQL合作原理](https://www.cyut.edu.tw/~hcchu/course/MAN_95A/MANCh10.pdf) * [wagon介紹](https://github.com/laravel-dojo/wagon) * [安裝/設定 PhpStorm](https://ithelp.ithome.com.tw/articles/10195317) * [語意化版本](https://semver.org/lang/zh-TW/) * [Laravel 文件瀏覽器](https://medium.com/laraveldojo/laravel-dojo-monthly-challenge-no1-200ff7d0f02b) * [修改 Laravel 版本號](https://ithelp.ithome.com.tw/articles/10213570) * [Laravel 5.8 會員註冊及登入系統API:Model & Controller](https://ithelp.ithome.com.tw/articles/10226796) * [Laravel Helpers-dd()](https://ithelp.ithome.com.tw/m/articles/10222233) * [Composer 從入門到實戰](https://www.slideshare.net/shengyou/composer-fromscratch?ref=https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2F2vT5bqPgWM7mhr&url=http%3A%2F%2Fwww.slideshare.net%2Fshengyou%2Fcomposer-fromscratch&image=http%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fcomposer-from-scratch-160923040723-thumbnail-4.jpg%3Fcb%3D1475337195&key=d04bfffea46d4aeda930ec88cc64b87c&type=text%2Fhtml&schema=slideshare) * [20190718-1_Composer 套件管理.pdf](https://www.dropbox.com/sh/smckyemt1i82les/AADoUR6gB6E6Zu7jQe64svUba/20190718_Laravel%20API%E5%8F%8ASSO%E8%AA%B2%E7%A8%8B/%E6%8A%95%E5%BD%B1%E7%89%87?dl=0&preview=20190718-1_Composer+%E5%A5%97%E4%BB%B6%E7%AE%A1%E7%90%86.pdf&subfolder_nav_tracking=1) * [php – namespace 命名空間教學介紹](http://jsnwork.kiiuo.com/archives/1947/1947/) * [asset 語法與 {{}} 介紹](https://ithelp.ithome.com.tw/articles/10194132) * [Laravel 5.2 Blade 樣板引擎語法介紹](https://laravel.tw/docs/5.2/blade#defining-a-layout) * [Laravel 5.7 Views and Blade](https://blog.johnsonlu.org/laravel-blade-views/)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up