Laravel框架筆記(一)

weixin_33935777發表於2017-03-31

本文轉自CSDN,在原作者基礎上將老版本laravel的目錄更正為最新laravel5.4目錄,去除了不太好理解的部分並使用Markdown語法。
檢視原文

本文讀完的收穫如下:

  1. 如何安裝laravel,連線資料庫。
  2. laravel程式的基本檔案結構。
  3. MVC和REST架構的基本原理。
  4. 如何快速生成laravel程式的骨架。

1. 準備工作

本文針對 Laravel 程式的初學者,不需要預先具備任何的 Laravel 使用經驗。不過,為了能順利閱讀,還是需要事先安裝好一些軟體並對其有一些瞭解:

Laravel 是使用 PHP 語言開發的網頁程式框架。相信知道 Laravel 的人肯定是知道PHP的,下面是PHP官網,提供各種API參考。
訪問PHP官網:http://php.net/

2. laravel是什麼?

Laravel 是使用 PHP 語言編寫的網頁程式開發框架,目的是為開發者提供常用元件,簡化網頁程式的開發。只需編寫較少的程式碼,就能實現其他程式語言或框架難以企及的功能。經驗豐富的 PHP 程式設計師會發現,Laravel 讓程式開發變得更有樂趣。
Laravel 哲學

Laravel 是一套富有表達性且具有簡潔語法的網頁應用程式框架。我們認為開發過程應該是愉悅且有創造性的體驗。Laravel 努力減少開發過程中的不便,因此我們提供了驗證(authentication)、路由(routing)、sessions、快取(caching)等開發過程中經常用到的工具或功能。

Laravel 目標是給開發者創造一個愉快的開發過程,並且不犧牲應用程式的功能性。快樂的開發者才能創造最棒的程式碼。為了這個目的,我們竭取了各框架的優點集中到 Laravel 中,這些框架包括並不侷限於 Ruby on Rails(ROR)、ASP.NET MVC 和 Sinatra 等。

Laravel 是易於理解且強大的,它提供了強大的工具來開發大型、穩健的應用程式。傑出的 IoC、資料庫遷移工具和緊密整合的單元測試,這些工具賦予您構建任何大小規模的應用程式的能力。

3. 新建laravel程式

閱讀本文時,最好跟著一步一步操作,如果錯過某段程式碼或某個步驟,程式就可能出錯,所以請一步一步跟著做。

本文會新建一個名為 blog 的 Laravel 程式,這是一個非常簡單的部落格。
文中的示例程式碼使用 $ 表示命令列提示符,你的提示符可能修改過,所以會不一樣。在 Windows 中,提示符可能是 c:\source_code>。

3.1 安裝 Laravel

開啟命令列:在 Mac OS X 中開啟 Terminal.app,在 Windows 中選擇“執行”,然後輸入“cmd.exe”。下文中所有以 $ 開頭的程式碼,都要在命令列中執行。先確認是否安裝了 PHP 5.4 或者以上的版本:

有很多工具可以幫助你快速在系統中安裝 PHP 。Windows 使用者可以使用 WAMP,PHPStudy或者XAMPP,Mac OS X 使用者可以使用 MAMP。

$ php -v
PHP 7.0.12 (cli) (built: Oct 13 2016 11:04:07) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

很多類 Unix 系統都自帶了版本尚新的 SQLite3。Windows 等其他作業系統的使用者可以在 SQLite3 的網站上找到安裝說明。關於Windows,Linux和MacOS三大平臺如何安裝Sqlite可以花三分鐘看一下我的這篇文章

$ sqlite3 --version或者sqlite3
3995745-eb88775184cc48cd.png
Paste_Image.png

安裝 Laravel ,通過 Laravel 安裝器(速度比composer安裝快)
首先, 使用 Composer 全域性下載並安裝 Laravel/installer:

$ composer global require "laravel/installer"

請確定把~/.composer/vendor/bin 路徑放置於您的 PATH 裡, 這樣laravel 可執行檔案才能被命令列找到, 以後您就可以在命令列下直接使用 laravel 命令。這裡你也可以使用composer安裝laravel,不嫌棄打字麻煩的也可以用區域性安裝composer.phar。

安裝並且配置成功後, 可以使用命令laravel new blog 在當前目錄下建立一個叫 blog 的目錄, 此目錄裡面存放著全新安裝的 Laravel 應用, 此方法跟其他方法不一樣的地方在於是提前安裝好所有程式碼依賴的, 您無需再通過composer install 安裝, 速度一下子提高了很多。

Laravel 框架使用 composer 來執行安裝及管理依賴。如果還沒有安裝它的話,請先從 安裝 Composer 開始吧。
安裝之後,您可以通過終端執行下列命令來安裝 Laravel:

$ composer create-project laravel/laravel 【Project-Name】 --prefer-dist

這個命令會下載並安裝一份全新的 Laravel 存放在指定的 Project-Name 的目錄中。

如果您想要手動安裝 Laravel 可以直接從Github 上的 Laravel Respoitory下載一份程式碼。然後在解壓後的根目錄裡,執行 composer install 即可,這個命令會把框架所需要的依賴下載完整。

3.2 建立 Blog 程式

Artisan 是 Laravel 內建的命令列工具,它提供了一些有用的命令協助您開發,它是由強大的 Symfony Console 元件所驅動。

開啟終端,進入有寫許可權的資料夾,執行以下命令生成一個新程式:

$ laravel new blog

或者

$ composer create-project laravel/laravel blog --prefer-dist

這個命令會在資料夾 blog 中新建一個 Laravel 程式。

執行 laravel new -h 可以檢視新程式生成器的所有命令列選項。
生成 blog 程式後,進入該資料夾:

$ cd blog

blog 資料夾中有很多自動生成的檔案和資料夾,組成一個 Laravel 程式。本文大部分時間都花在 app 資料夾上。下面簡單介紹預設生成的檔案和資料夾的作用:

檔案/資料夾 作用
app/ 包含了站點的 controllers(控制器),models(模型),views(檢視)和 assets(資源)。這些是網站執行的主要程式碼,你會將你大部分的時間花在這些上面。本文主要關注的是這個資料夾。
bootstrap/ 用來存放系統啟動時需要的檔案,這些檔案會被如 index.php 這樣的檔案呼叫。
public/ 這個資料夾是唯一外界可以看到的,是必須指向你 web 伺服器的目錄。它含有 laravel 框架核心的引導檔案 index.php,這個目錄也可用來存放任何可以公開的靜態資源,如 css,Javascript,images 等。
vendor/ 用來存放所有的第三方程式碼,在一個典型的 Laravel 應用程式,這包括 Laravel 原始碼及其相關,並含有額外的預包裝功能的外掛。
config/ 配置應用程式的執行時規則、 資料庫、 session等等。包含大量的用來更改框架的各個方面的配置檔案。大部分的配置檔案中返回的選項關聯PHP陣列。
storage/ 該目錄儲存Laravel各種服務的臨時檔案,如session, cache, compiled view templates。這個目錄在web伺服器上必須是可以寫入的。該目錄由Laravel維護,我們可以不關心。
tests/ 該資料夾給你提供了一個方便的位置,用來做單元測試。如果你使用PHPUnit,你可以使用Artisan工具一次執行所有的測試。
config/app.php 各種應用程式級設定,即時區、 區域設定(語言環境)、 除錯模式和獨特的加密金鑰。
config/auth.php 控制在應用程式中如何進行身份驗證,即身份驗證驅動程式。
config/cache.php 如果應用程式利用快取來加快響應時間,要在此配置該功能。
config/compile.php 在此處可以指定一些額外類,去包含由‘artisan optimize’命令聲稱的編譯檔案。這些應該是被包括在基本上每個請求到應用程式中的類。
config/database.php 包含資料庫的相關配置資訊,即預設資料庫引擎和連線資訊。
config/mail.php 為電子郵件發件引擎的配置檔案,即 SMTP 伺服器,From:標頭
config/session.php 控制Laravel怎樣管理使用者sessions,即session driver, session lifetime。
config/view.php 模板系統的雜項配置。
app/Http/Controllers 包含用於提供基本的邏輯、 資料模型互動以及載入應用程式的檢視檔案的控制器類。
database/migrations/ 包含一些 PHP 類,允許 Laravel更新當前資料庫的架構並同時保持所有版本的資料庫的同步。遷移檔案是使用Artisan工具生成的。
database/seeds/ 包含允許Artisan工具用關係資料來填充資料庫表的 PHP 檔案。
resources/lang/ PHP 檔案,其中包含使應用程式易於本地化的字串的陣列。預設情況下目錄包含英語語言的分頁和表單驗證的語言行。
app/Models/ 模型是代表應用程式的資訊(資料)和運算元據的規則的一些類。在大多數情況下,資料庫中的每個表將對應應用中的一個模型。應用程式業務邏輯的大部分將集中在模型中。
resources/views/ 該資料夾包含了控制器或者路由使用的HTML模版。請注意,這個資料夾下你只能放置模版檔案。其他的靜態資原始檔如css, javascript和images檔案應該放在/public資料夾下。
routes/web.php 這是您的應用程式的路由檔案,其中包含路由規則,告訴 Laravel 如何將傳入的請求連線到路由處理的閉包函式、 控制器和操作。該檔案還包含幾個事件宣告,包括錯誤頁的,可以用於定義檢視的composers。

4. Hello Laravel!

首先,我們來新增一些文字,在頁面中顯示。為了能訪問網頁,要進入blog資料夾,然後啟動程式伺服器。

$ php artisan serve

上述命令會啟動 PHP 內建的開發伺服器,要檢視程式,請開啟一個瀏覽器視窗,訪問 http://localhost:8000 。應該會看到預設的 Laravel 資訊頁面(當然你也可以使用整合環境或者apache/nginx):

3995745-12ae6f42476a30fb.png
laravel5.4

要想停止內建伺服器,請在命令列中按 Ctrl+C 鍵。伺服器成功停止後回重新看到命令列提示符。在大多數類 Unix 系統中,包括 Mac OS X,命令列提示符是 $ 符號。

4.1 Route-View-Controller 設定程式的首頁

要在 Laravel 中顯示“Hello, Laravel!”,需要新建一個控制器和檢視。

控制器用來接受向程式發起的請求。路由決定哪個控制器會接受到這個請求。一般情況下,每個控制器都有多個路由,對應不同的動作。動作用來提供檢視中需要的資料。

檢視的作用是,以人類能看懂的格式顯示資料。有一點要特別注意,資料是在控制器中獲取的,而不是在檢視中。檢視只是把資料顯示出來。預設情況下,檢視使用 Blade 編寫,經由 Laravel 解析後,再傳送給使用者。

**生成路由: **

為了讓使用者訪問 /index ,我們先在 routes/web.php/ 中新增路由:

Route::any('/index', 'WelcomeController@index');

**建立檢視: **

在 resources/views/ 下新建資料夾 Welcome 並建立檔案index.blade.php ;
在 index.blade.php 檔案中新增

<i>This is my first laravel demo</i>;

**使用Artisan建立控制器: **

控制器可用控制器生成器 Artisan 建立,你要告訴生成器,我想要個名為 “Welcome” 的控制器,如下所示:

$ php artisan make:controller WelcomeController

執行上述命令後,會生成 app/Http/Controllers/WelcomeController.php 檔案。生成檔案後新增修改其中的 index 方法:

public function index()
{
    return view('welcome.index');
}

現在路由-檢視-控制器我們都有了,還沒涉及到資料庫還沒使用Model處理業務邏輯,現在訪問http://localhost:8000/index,效果如圖:

3995745-4914e5e67b0ca4f2.png
laravel-rvc

5. 開始開發


前文已經介紹如何建立路由、檢視和控制器,下面我們來建立一些更實質的功能。
在此之前我們需要修改一些配置:

    config/app.php 檔案中的 debug 選項設定為 true 
    (注:開啟開發模式,更友好的開發提示);

    config/database.php 檔案中的 default 選項設定為 sqlite 
    (注:我們之前選擇 sqlite 作為預設資料庫);

在部落格程式中,我們要建立一個新“資源”。資源是指一系列類似的物件,比如文章,人和動物。
資源可以被建立、讀取、更新和刪除,這些操作簡稱 CRUD。

Laravel 提供了資源控制器可以簡單的建立跟資源相關的 RESTful 控制器。 建立文章資源後,routes.php/web.php 檔案的內容新增如下:

Route::resource('articles', 'ArticlesController');

執行 $ php artisan route:list 任務,會看到定義了所有標準的 REST 動作。輸出結果中各列的意義稍後會說明。

3995745-2c7c53ff9b0a6782.png
REST動作

下一節,我們會加入新建文章和檢視文章的功能。這兩個操作分別對應於 CRUD 的 C 和 R,即建立和讀取。

5.1 挖地基

首先,程式中要有個頁面用來新建文章。一個比較好的選擇是 /articles/create。我們先使用Artisan控制檯建立控制器。

$ php artisan make:controller ArticlesController

那麼我們訪問一下http://localhost:8000/articles/create 看看效果:

3995745-08e6da67a4679017.png
這是八成是web.php路由問題或者URL寫錯了

所以我們需要一個路由,在 routes/web.php 新增路由,檔案程式碼如下:

Route::any('/articles/create', 'ArticlesController@create');

我們再來訪問一下 http://localhost:8000/articles/create

3995745-731b69c076f11d65.png
看清楚這幾張圖哦,這張是控制器的create()方法不存在

既然create()不存在,那編輯 app/Http/Controller/ArticlesController.php ,控制器就是一個類,繼承自 Controller。在這個 ArticlesController 類中定義了對應的資源動作。動作的作用是處理文章的 CRUD 操作。
為 ArticlesController.php 檔案中的class新增建立方法:

public function create() {
    return view('articles.create');
}

在 PHP 中,方法分為 public、private 和 protected 三種,只有 public 方法才能作為控制器的動作。

新建檔案 app/views/articles/create.blade.php,寫入如下程式碼:
<h1>New Article</h1>
再次重新整理 http://localhost:8000/articles/create , 可以看到頁面中顯示了一個標頭。

3995745-94ca961a235e6328.png
來自簡書

現在路由、控制器、動作和檢視都能正常執行了。接下來要編寫新建文章的表單了。

5.2 首個表單

要在模板中編寫表單,可以使用“表單構造器”。Laravel 中常用的表單構造器是 Form。在 resources/views/articles/create.blade.php 檔案中加入以下程式碼:

{{ Form::open() }}
    <p>
        {{ Form::text('title') }}
    </p>
    <p>
        {{ Form::text('text') }}
    </p>
    <p>
        {{ Form::submit('submit') }}
    </p>
{{ Form::close() }}

現在重新整理頁面,會看到上述程式碼生成的表單。在 Laravel 中編寫表單就是這麼簡單!

在 Form 方法的塊中,Form::text 建立了兩個標籤和兩個文字欄位,一個用於文章標題,一個用於文章內容。最後,Form::submit 建立一個提交按鈕。

不過這個表單還有個問題。如果檢視這個頁面的原始碼,會發現表單 action 屬性的值是 /articles/create。這就是問題所在,因為其指向的地址就是現在這個頁面,而這個頁面是用來顯示新建文章表單的。

要想轉到其他地址,就要使用其他的地址。這個問題可使用 Form::open 方法的 url 引數解決。在 Laravel 中,用來處理新建資源表單提交資料的動作是 store,所以表單應該轉向這個動作。

修改 resources/views/articles/create.blade.php 檔案中的 Form::open,改成這樣:

{{ Form::open(array('url' => 'articles')) }}

這裡,我們把 url 引數的值設為 articles 。對應的地址是 /articels,預設情況下,這個表單會向這個路由發起 POST 請求。這個路由對應於 ArticlesController 控制器的 store 動作。

表單寫好了,路由也定義了,現在可以填寫表單,然後點選提交按鈕新建文章了。

5.3

5.4

5.5

5.6

5.7

5.8

5.9

5.10

5.11

5.12

5.13

6. 接下來做什麼?


至此,我們開發了第一個 Laravel 程式,請盡情的修改、試驗。在開發過程中難免會需要幫助,如果使用 Laravel 時需要協助,可以使用這些資源:

7. 常見問題


使用 Laravel 時,最好使用 UTF-8 編碼儲存所有外部資料。

如果編碼出錯,常見的徵兆是瀏覽器中顯示很多黑色方塊和問號。還有一種常見的符號是“ü”,包含在“ü”中。

非 UTF-8 編碼的資料經常來源於:

你的文字編輯器:大多數文字編輯器(例如 TextMate)預設使用 UTF-8 編碼儲存檔案。如果你的編輯器沒使用 UTF-8 編碼,有可能是你在模板中輸入了特殊字元(例如 é),在瀏覽器中顯示為方塊和問號。這種問題也會出現在國際化檔案中。預設不使用 UTF-8 儲存檔案的編輯器(例如 Dreamweaver 的某些版本)都會提供一種方法,把預設編碼設為 UTF-8。記得要修改。

你的資料庫:預設情況下,Laravel 會把從資料庫中取出的資料轉換成 UTF-8 格式。如果資料庫內部不使用 UTF-8 編碼,就無法儲存使用者輸入的所有字元。例如,資料庫內部使用 Latin-1 編碼,使用者輸入俄語、希伯來語或日語字元時,存進資料庫時就會永遠丟失。如果可能,在資料庫中儘量使用 UTF-8 編碼。

相關文章