1. <s id="ykofe"></s>
      <object id="ykofe"><option id="ykofe"></option></object>

      <s id="ykofe"></s>

      Laravel - 為 WEB 藝術家創造的 PHP 框架。

      PHP THAT DOESN'T HURT. CODE HAPPY & ENJOY THE FRESH AIR.

      Laravel logo

      2016 版 Laravel 系列入門教程(一)

      本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5

      在任何地方卡住,最快的辦法就是去看示例代碼。

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

      Laravel 5.1 中文文檔:
      1. http://www.ap4lp.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 服務器驅動我們的網站。運行以下命令:

      cd learnlaravel5/public
      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,修改下面幾行的值:

      DB_HOST=127.0.0.1
      DB_PORT=3306
      DB_DATABASE=laravel5
      DB_USERNAME=root
      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 文件:

      <?php
      
      namespace App;
      
      use Illuminate\Database\Eloquent\Model;
      
      class Article extends Model
      {
          //
      }
      

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

      下面是幾個簡單的例子:

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

      $article = Article::find(2);
      
      echo $article->title;
      

      查找標題為“我是標題”的文章,并打印 id

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

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

      $articles = Article::all(); // 此處得到的 $articles 是一個對象集合,可以在后面加上 '->toArray()' 變成多維數組。
      
      foreach ($articles as $article) {
      
          echo $article->title;
      
      }
      

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

      $articles = Article::where('id', '>', 10)->where('id', '<', 20)->get();
      
      foreach ($articles as $article) {
      
          echo $article->title;
      
      }
      

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

      $articles = Article::where('id', '>', 10)->where('id', '<', 20)->orderBy('updated_at', 'desc')->get();
      
      foreach ($articles as $article) {
      
          echo $article->title;
      
      }
      

      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 函數為:

      public function up()
      {
          Schema::create('articles', function(Blueprint $table)
          {
              $table->increments('id');
              $table->string('title');
              $table->text('body')->nullable();
              $table->integer('user_id');
              $table->timestamps();
          });
      }
      

      這幾行代碼描述的是 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 函數為:

      public function run()
      {
          DB::table('articles')->delete();
      
          for ($i=0; $i < 10; $i++) {
              \App\Article::create([
                  'title'   => 'Title '.$i,
                  'body'    => 'Body '.$i,
                  'user_id' => 1,
              ]);
          }
      }
      

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

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

      public function run()
      {
          $this->call(ArticleSeeder::class);
      }
      

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

      composer dump-autoload
      

      然后執行 seed:

      php artisan db:seed
      

      你應該得到如下結果:

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


      原文:https://github.com/johnlui/Learn-Laravel-5/issues/4


      關于作者 JohnLui
      PHP 框架 TinyLara 作者。
      国模吧私拍