本文轉自CSDN,在原作者基礎上將老版本laravel的目錄更正為最新laravel5.4目錄,去除了不太好理解的部分并使用Markdown語法。
查看原文
本文讀完的收獲如下:
- 如何安裝laravel,連接數據庫。
- laravel程序的基本文件結構。
- MVC和REST架構的基本原理。
- 如何快速生成laravel程序的骨架。
1. 準備工作
本文針對 Laravel 程序的初學者,不需要預先具備任何的 Laravel 使用經驗。不過,為了能順利閱讀,還是需要事先安裝好一些軟件并對其有一些了解:
- PHP 5.4 及以上版本
- 包管理工具 Composer
訪問Composer官網
訪問Composer中文網 - SQLite3 數據庫
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
安裝 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):
要想停止內置服務器,請在命令行中按 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,效果如圖:
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 動作。輸出結果中各列的意義稍后會說明。
下一節,我們會加入新建文章和查看文章的功能。這兩個操作分別對應于 CRUD 的 C 和 R,即創建和讀取。
5.1 挖地基
首先,程序中要有個頁面用來新建文章。一個比較好的選擇是 /articles/create。我們先使用Artisan控制臺創建控制器。
$ php artisan make:controller ArticlesController
那么我們訪問一下http://localhost:8000/articles/create 看看效果:
所以我們需要一個路由,在 routes/web.php 添加路由,文件代碼如下:
Route::any('/articles/create', 'ArticlesController@create');
我們再來訪問一下 http://localhost:8000/articles/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 , 可以看到頁面中顯示了一個標頭。
現在路由、控制器、動作和視圖都能正常運行了。接下來要編寫新建文章的表單了。
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 編碼。