Laravel 框架,安裝,使用

本文基於 Laravel 5.2 版本,無奈 5.2 的中文文檔還沒有跟上,大家勉強看一下 5.1 的吧:

Laravel 5.1 中文文檔:

  1. http://www.golaravel.com/laravel/docs/5.1/
  2. http://laravel-china.org/docs/5.1

默認條件

你應該懂得 PHP 網站運行的基礎知識,並且有了一個完善的開發環境。跟隨本教程走完一遍,你將會得到一個基礎的包含登錄、後臺編輯、前臺評論的簡單 blog 系統。

Tips

  1. 環境要求:PHP 5.5.9+,MySQL 5.1+
  2. 本教程不推薦完全不懂 PHP 與 MVC 編程的人學習,Laravel 的學習曲線不僅僅是陡峭,而且耗時很長,請先做好心理準備。
  3. 這不是 “一步一步跟我做” 教程。本教程需要你付出一定的心智去解決一些或大或小的隱藏任務,以達到真正理解 Laravel 運行邏輯的目的。
  4. 本寶寶使用 Safari 截圖是爲了好看,寶寶們在開發時請選擇 Chrome 哦~

開始學習

1. 安裝

許多人被攔在了學習 Laravel 的第一步:安裝。並不是因爲安裝有多複雜,而是因爲【衆所周知的原因】。在此我推薦一個 composer 全量中國鏡像:http://pkg.phpcomposer.com/ 。啓用 Composer 鏡像服務作爲本教程的第一項小作業請自行完成哦。

鏡像配置完成後,在終端(Terminal 或 CMD)裏切換到你想要放置該網站的目錄下(如 C:\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),運行命令:

composer create-project laravel/laravel learnlaravel5

然後,稍等片刻,當前目錄下就會出現一個叫 learnlaravel5 的文件夾,安裝完成啦~

2. 運行

爲了儘可能地減緩學習曲線,推薦寶寶們使用 PHP 內置 web 服務器驅動我們的網站。運行以下命令:


 
  1. cd learnlaravel5/public

  2. php -S 0.0.0.0:1024

這時候訪問 http://127.0.0.1:1024 就是這個樣子的:

我在本地 hosts 中綁定了 fuck.io 到 127.0.0.1,所以截圖中我的域名是 fuck.io 而不是 127.0.0.1,其實他們是完全等價的。

這時候你可能要問了:爲什麼本寶寶的頁面是一片空白?請使用開發者工具查看網絡請求,只要是 200 狀態就說明運行成功了,空白是因爲這個頁面引用了 Google Fonts,你懂的~

至於爲什麼選擇 1024 端口?因爲他是 *UNIX 系統動態端口的開始,是我們不需要 root 權限就可以隨意監聽的數值最小的端口。

另外,建議不熟悉 PHP 運行環境搭建的寶寶們不要輕易嘗試使用 Apache 或 Nginx 驅動 Laravel,特別是在開啓了 SELinux 的 Linux 系統上跑。關於 Laravel 在 Linux 上部署的大坑,本寶寶可能要單寫一篇長文分享給寶寶們。

3. 體驗牛逼閃閃的 Auth 系統

Laravel 利用 PHP5.4 的新特性 trait 內置了非常完善好用的簡單用戶登錄註冊功能,適合一些不需要複雜用戶權限管理的系統,例如公司內部用的簡單管理系統。

激活這個功能非常容易,運行以下命令:

php artisan make:auth

訪問 http://fuck.io:1024/login,如果你本地已經科學上網,那就能看到以下頁面:

如果你不能科學上網,就把 learnlaravel5/resources/views/layouts/app.blade.php 中的 https://fonts.googleapis.com 換成 http://fonts.useso.com 就好啦~

cdnjs.cloudflare.com 可能會短暫抽風,不要灰心,那只是大牆在抖動,一會兒就好了。

4. 連接數據庫

接下來我們要連接數據庫了,請自行準備好 MySQL 服務哦。

a. 修改配置

不出意外的話,learnlaravel5 目錄下已經有了一個 .env 文件,如果沒有,可以複製一份 .env.example 文件重命名成 .env,修改下面幾行的值:


 
  1. DB_HOST=127.0.0.1

  2. DB_PORT=3306

  3. DB_DATABASE=laravel5

  4. DB_USERNAME=root

  5. DB_PASSWORD=password

推薦新建一個名爲 laravel5 的數據庫,並且使用 root 賬戶直接操作,降低學習數據庫的成本。

數據庫配置好之後,在登錄界面填寫任意郵箱和密碼,點擊 Login,你應該會得到以下畫面:

它說 users 表不存在呀,接下來我們將見識 Laravel 另外一個實用特性。

b. 進行數據庫遷移(migration)

運行命令:

php artisan migrate

我們得到了如下結果:

數據庫遷移成功!趕快打開 http://fuck.io:1024/home 註冊一個用戶試試吧~

下圖是本寶寶註冊了一個 username 爲 1 用戶:

c. migration 是啥?

打開 learnlaravel5/database/migrations/2014_10_12_000000_create_users_table.php 文件,你肯定能一眼看出它的作用:用 PHP 描述數據庫構造,並且使用命令行一次性部署所有數據庫結構。

5. 使用 Laravel 的“葵花寶典”:Eloquent

Eloquent 是 Laravel 的 ORM,是 Laravel 系統中最強大的地方,沒有之一。當初 Laravel 作者在開發第一版的時候花了整整三分之一的時間才搞出來 Eloquent。當然,“欲練此功,必先自宮”,Eloquent 也是 Laravel 中最慢的地方,迄今無法解決。(路由、自動載入、配置分散、視圖引發的性能問題都通過緩存幾乎徹底解決了)

當然,我們還是要承襲第一版教程中對 Eloquent ORM 的描述:鵝妹子英!

如果你想深入地瞭解 Eloquent,可以閱讀系列文章:深入理解 Laravel Eloquent(一)——基本概念及用法

a. Eloquent 是什麼

Eloquent 是 Laravel 內置的 ORM 系統,我們的 Model 類將繼承自 Eloquent 提供的 Model 類,然後,就天生具備了數十個異常強大的函數,從此想幹啥事兒都是一行代碼就搞定。

b. 怎麼用?

我們使用 Artisan 工具新建 Model 類及其附屬的 Migration 和 Seeder(數據填充)類。

運行以下命令:

php artisan make:model Article

去看看你的 app 目錄,下面是不是多了一個 Article.php 文件?那就是 Artisan 幫我們生成的 Model 文件:


 
  1. <?php

  2.  
  3. namespace App;

  4.  
  5. use Illuminate\Database\Eloquent\Model;

  6.  
  7. class Article extends Model

  8. {

  9. //

  10. }

如此簡潔有力的代碼,隱藏了背後極高的難度和巨大的複雜度,讓我們閉上眼睛,靜靜地感受 Laravel 的優雅吧 (~ ̄▽ ̄)~

下面是幾個簡單的例子:

找到 id 爲 2 的文章打印其標題


 
  1. $article = Article::find(2);

  2.  
  3. echo $article->title;

查找標題爲“我是標題”的文章,並打印 id


 
  1. $article = Article::where('title', '我是標題')->first();

  2.  
  3. echo $article->id;

查詢出所有文章並循環打印出所有標題


 
  1. $articles = Article::all(); // 此處得到的 $articles 是一個對象集合,可以在後面加上 '->toArray()' 變成多維數組。

  2.  
  3. foreach ($articles as $article) {

  4.  
  5. echo $article->title;

  6.  
  7. }

查找 id 在 10~20 之間的所有文章並打印所有標題


 
  1. $articles = Article::where('id', '>', 10)->where('id', '<', 20)->get();

  2.  
  3. foreach ($articles as $article) {

  4.  
  5. echo $article->title;

  6.  
  7. }

查詢出所有文章並循環打印出所有標題,按照 updated_at 倒序排序


 
  1. $articles = Article::where('id', '>', 10)->where('id', '<', 20)->orderBy('updated_at', 'desc')->get();

  2.  
  3. foreach ($articles as $article) {

  4.  
  5. echo $article->title;

  6.  
  7. }

6. 使用 Migration 和 Seeder

接下來我們生成對應 Article 這個 Model 的 Migration 和 Seeder。

a. 使用 artisan 生成 Migration

在 learnlaravel5 目錄下運行命令:

php artisan make:migration create_article_table

成功之後打開 learnlaravel5/database/migrations,你會發現有一個名爲 2*_create_article_table 的文件被創建了。我們修改他的 up 函數爲:


 
  1. public function up()

  2. {

  3. Schema::create('articles', function(Blueprint $table)

  4. {

  5. $table->increments('id');

  6. $table->string('title');

  7. $table->text('body')->nullable();

  8. $table->integer('user_id');

  9. $table->timestamps();

  10. });

  11. }

這幾行代碼描述的是 Article 對應的數據庫中那張表的結構。Laravel 默認 Model 對應的表名是這個英文單詞的複數形式,在這裏,就是 articles。接下來讓我們把 PHP 代碼變成真實的 MySQL 中的數據表,運行命令:

php artisan migrate

執行成功後,articles 表已經出現在數據庫裏了:

上圖中的軟件叫 Sequel Pro,是一個開源的 MAC 下 MySQL GUI 管理工具,超好用,推薦給用 MAC 的同學。

b. 使用 artisan 生成 Seeder

Seeder 是我們接觸到的一個新概念,字面意思爲播種機。Seeder 解決的是我們在開發 web 應用的時候,需要手動向數據庫中填入假數據的繁瑣低效問題。

運行以下命令創建 Seeder 文件:

php artisan make:seeder ArticleSeeder

我們會發現 learnlaravel5/database/seeds 裏多了一個文件 ArticleSeeder.php,修改此文件中的 run 函數爲:


 
  1. public function run()

  2. {

  3. DB::table('articles')->delete();

  4.  
  5. for ($i=0; $i < 10; $i++) {

  6. \App\Article::create([

  7. 'title' => 'Title '.$i,

  8. 'body' => 'Body '.$i,

  9. 'user_id' => 1,

  10. ]);

  11. }

  12. }

上面代碼中的 \App\Article 爲命名空間絕對引用。如果你對命名空間還不熟悉,可以讀一下 《PHP 命名空間 解惑》,很容易理解的。

接下來我們把 ArticleSeeder 註冊到系統內。修改 learnlaravel5/database/seeds/DatabaseSeeder.php 中的 run 函數爲:


 
  1. public function run()

  2. {

  3. $this->call(ArticleSeeder::class);

  4. }

由於 database 目錄沒有像 app 目錄那樣被 composer 註冊爲 psr-4 自動加載,採用的是 psr-0 classmap 方式,所以我們還需要運行以下命令把 ArticleSeeder.php 加入自動加載系統,避免找不到類的錯誤:

composer dump-autoload

然後執行 seed:

php artisan db:seed

你應該得到如下結果:

這時候刷新一下數據庫中的 articles 表,會發現已經被插入了 10 行假數據:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章