作為一個純0基礎的入門選手,在工作之餘,用業餘時間終於完成了《Laravel入門教程》的第一刷,到後面幾章,基本是純按圖索驥了,很多細節都懵懵懂懂。
現在開始第二刷,發現很多後面的知識和前面的框架相結合,能夠碰撞出很多的新理解;所以,我打算把這些理解記錄下來,幫助和我一樣的零基礎朋友們學習Laravel【其中很多內容基於我現在的理解,有可能是錯誤的,歡迎指正】:
第一部分 整體理解:
這張圖很好的說明了,在Laravel架構下,使用者訪問URL的流程:
但到後來的程式設計中,大家會發現無論是Route, Controller,還是Model,View都是PHP檔案,也就是說Laravel建立了一個由PHP語言構建的框架,把由多種語言組成的前後端程式設計,變成了基本由PHP或者相近需要構建的規則,然後編譯成各種操作。
最開始,我們會很自然的認為Controller是MVC的核心,因為他負責聯絡Route、Model和View,核心的邏輯應該寫在Controller裡面,而且在後面的學習裡面,Controller裡面的程式碼量是最多的。
但最近看到一篇文章《深入理解MVC》
https://zhuanlan.zhihu.com/p/35680070
覺得很有道理,Controller應該主要擔當前後端的連線角色,業務邏輯在Model裡,這樣業務邏輯發生變化的時候;只需要重新建一個Model,然後在Controller裡進行重新連結了。這個估計需要在未來的高階教程中慢慢的領悟了。
第二部分 Route和MVC的理解:
Route將前端頁面使用者的不同行為GET, POST, PATCH, DELETE,引導至不同的Controller下面的不同方法即不同function,其中使用name屬性可以在前端使用{{route('home')}}的寫法進行動態連結:
Route::get('/', 'StaticPagesController@home')->name('home');
Route::get('/help', 'StaticPagesController@help')->name('help');
Route::get('/about', 'StaticPagesController@about')->name('about');
Controller包含了各種方法的具體內容,在這裡包含了頁面呼叫,表單資料驗證、表單提交至資料庫等等。
<?php namespace App\Http\Controllers;
.
.
.
class UsersController extends Controller
{
public function create()
{
return view('users.create'); // 頁面呼叫
}
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|max:50',
'email' => 'required|email|unique:users|max:255',
'password' => 'required|confirmed|min:6'
]); // 表單驗證
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]); // 表單提交至使用者Model - 資料庫
session()->flash('success', '歡迎,您將在這裡開啟一段新的旅程~'); // 表單提交後操作
return redirect()->route('users.show', [$user]); // 表單提交後頁面重定向
}
}
Model是資料模型,包含了資料處理的核心邏輯,這塊對於像我這樣0基礎的同學們來說,理解起來稍微有點複雜,目前我是這樣理解的:
每個資料模型預設對應了一個資料庫,在Laravel的預設約定是:User資料模型類對應著users表,在建立的時候:
$ php artisan make:model Models/Article --migration
Model created successfully.
Created Migration: 2016_09_10_023235_create_articles_table
而資料庫migration檔案並不是資料庫本身,而是表頭設定檔案,需要:
$ php artisan migrate
匯入表標頭檔案,而如果需要在現有的資料庫增加表頭列而清除現有資料的話,可以新建一個資料遷移migration檔案,然後在最後--table=users來指定要修改的表:
$ php artisan make:migration add_activation_to_users_table --table=users
在具體實現中,Laravel通過一些約定,使得資料庫到Model,Model到Controller,Controller到View均可以傳遞引數,從而實現了前端到後端,後端到前端的動態互動。
最後View使用php的blade語法和SASS定義渲染的規則,注意並不是前端程式碼本身,因此需要npm run watch-poll做編譯,在public下生成html, JS和CSS,這塊的通用檢視和區域性檢視的用法大大的縮減了程式碼量和維護的難度。在課程中,我首次的時候使用npm run watch-poll是沒有問題的,第二次建立的時候就出錯了,根據對應章節裡面的解決方案,給大家一個參考的解決方案:
$ sudo apt-get install libpng16-dev
$ yarn install —no-bin-links
$ yarn add cross-env
以上,是我目前的一些理解,目前在進行三刷,並同時記錄一些領悟和想法,希望能夠幫自己理清思路,同時也幫助到同樣零基礎的朋友們。