Laravel 5.2 - 啟程
[vc_row][vc_column][vc_column_text]重話講在前頭,沒有PHP背景請勿輕易嘗試。
本文開始
Laravel是什麼呢?
Laravel是一款採用PHP的後端MVC框架,然而,我會建議初學者使用Laravel wagon所提供的免安裝環境。
Laravel wagon需要
- Visual C++ 可轉散發套件 2012
- Visual C++ 可轉散發套件 2015
- 下載 wagon (1.3.0)
下載完成之後把wagon解壓縮至欲放置的位置,然後,讓我們開始吧!
請先開啟你的UwAmp (一套標準的Windows Apache MySQL PHP Server)
路徑為:wagon\uwamp\UwAmp.exe
確認你的Apache與MySql處於Running狀態(如果沒有的話,請嘗試安裝Visual C++ 2012 2015 x86版本),
在瀏覽器上連結至http://localhost:8000/或http://127.0.0.1:8000/,會看到wagon works!的字樣。
現在,我們來建立一個新的Laravel專案:
開啟wagon\cmder\Cmder.exe (一款可以使用Windows 以及 Linux的命令提示字元),
如果跳出警告視窗,選擇第一個選項。
接下來會看到我們所在路徑是wagon\uwamp\www,
我們在此鍵入laravel new {專案名稱},例如: <code class="EnlighterJSRAW" data-enlighter-language="null">laravel new test
改版到5.3了,所以新指令在這裡:
<code class="EnlighterJSRAW" data-enlighter-language="null">composer create-project laravel/laravel test "5.2.*"
->請自行尋求打發時間的方法,這會持續一段時間<-
完成後會看到Application ready! Build something amazing.的字樣
讓我們進到UwAmp的Apache Config,
然後把預設路徑的{DOCUMENTPATH}/default改成{DOCUMENTPATH}/test/public (請依自己的專案名稱修改test部分)
再重新整理,即可看到Laravel 5 (我們所使用的版本是Laravel 5.2)
在Laravel官方有提供相關的教學文件,有部分是英文的,可以切換至5.1版本瀏覽中文(內容通常大同小異)。
我們接下來處理資料庫部分(MySQL),連結到http://localhost:8000/mysql/,預設帳號:root,密碼為空,
現在出現了一個問題,登入失敗,而且回報給我們一串亂碼,解決方式如下:
下載WampServer,開啟並等待右下角圖示轉換為綠色
(抱歉…我找不到更好的方法了)
進入之後我們建立一個新的資料庫,比如說test_db,之後到Laravel設定檔進行設定。
我建議使用Sublime Text或者是Atom,這兩個編輯器可以把整個專案資料夾集中管理,方便我們使用。
我們直接把wagon\uwamp\www\test拖曳到Sublime Text或Atom。
先從資料庫開始,
找到.env,編輯以下部分:
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=
接下來編輯時區(可以不編輯沒有關係):
config\app.php
‘timezone’ => ‘Asia/Taipei’,
我們現在先來學習建立controller以及model(就不贅述MVC架構了)
<code class="EnlighterJSRAW" data-enlighter-language="null">artisan make:controller TestController --resource
有沒有–resource的差別在於會不會幫你建立以下function:
- index()
- create()
- store(Request $request)
- show($id)
- edit($id)
- update(Request $request, $id)
- destroy($id)
這樣子,一個controller就建立完成了,controller的路徑位於app\Http\Controllers。
<code class="EnlighterJSRAW" data-enlighter-language="null">artisan make:model Test -m
有沒有-m的差別在於migration,也就是所謂的資料庫遷移,其路徑在database\migrations,
然而我們新增的檔案會是{今天的日期}create{model名稱}s_table。
在up function裡面會看到:
$table->increments('id'); $table->timestamps();
其中,increaments是主鍵(一個遞增的int),其名稱為id,timestamps是時間暫存(建立時間以及更新時間),
若要新增新的欄位,可以這樣打:
<code class="EnlighterJSRAW" data-enlighter-language="php">$table->string('name');
這樣會建立一個欄位名稱name,是一個varchar的格式。
我們可以利用migration來在資料庫中建立資料表:
<code class="EnlighterJSRAW" data-enlighter-language="null">artisan migrate
也可以使用make:migration直接建立新的資料表:
<code class="EnlighterJSRAW" data-enlighter-language="null">artisan make:migration tests
然而,我們又可以把model做歸類,參考這篇文章:胖胖Model減重的五個方法by howtomakeaturn – Slides
不過,我的分類有點不一樣,是分成Repository、Entity、Service
我們現在有了Controller以及Model,接下來就來說一下所謂的路由(route),
其路徑在app\Http\routes.php。
何謂路由? 你想要在http://localhost:8000/test/上顯示東西,此時你就需要建立新的路由。
Route::get('/', function () { return view('welcome'); });
這是預設的情況下,當使用者連結至http://localhost:8000/,路由就會幫你導入welcom這個view,其路徑為resources\views。
現在,我們撰寫一個view如下:
resources\views\hello.blade.php
Hello, Laravel!
然後在路由底下新增:
Route::get('/test', function() { return view('hello'); });
然後試著連接http://localhost:8000/test/看看,有東西了唄!
那麼Controller是拿來幹嘛的?
當你需要使用Controller,你可以這樣做(記得把上面那段mark掉,或者直接砍掉):
<code class="EnlighterJSRAW" data-enlighter-language="php">Route::get('/test', 'TestController@index');
然後到app\Http\Controllers\TestController.php,
在make Controller時沒有使用–resource的同學請新增,有使用–resource的同學只要在index內修改即可。
public function index() { return view('hello'); }
這樣就可以達到跟上面相同的效果,但為什麼要這樣做呢?
應該沒有人會把全部的function寫在路由上吧…(那MVC的意義何在呢?)
這邊,我們就來實際的Demo一下整個Laravel如何操作:
其實,不把Model拆分成那麼細也沒有關係,我也只是因為實驗室那邊的要求才這樣做的,但是這有助於整個團隊的撰寫以及DeBug。
至於,Blade部分,我們擇日再談。
我們先把路由以及Controller的部分清除(避免混淆視聽),
然後,我們要新增欄位,在database\migration的資料表遷移部分新增:
$table->string('name'); $table->integer('phone');
然後把原本的test_db資料表刪除後再進行一次:
<code class="EnlighterJSRAW" data-enlighter-language="null">artisan migrate
我們在app\Http\Controllers\TestController的index()部分新增:
<code class="EnlighterJSRAW" data-enlighter-language="php">return view('index');
新增一個檔案resources\views\index.blade.php:
這是一個簡易的超連結而已。
在app\Http\Controllers\TestController的create()部分新增:
<code class="EnlighterJSRAW" data-enlighter-language="php">return view('create');
新增一個檔案resources\views\create.blade.php: