<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] ### **關注文檔→[進群一起學習提升吧](https://jq.qq.com/?_wv=1027&k=5dpB2jL)** ## **默認條件** 你應該懂得 PHP 網站運行的基礎知識,并且擁有一個完善的開發環境。跟隨本教程走完一遍,你將會得到一個基礎的包含登錄、后臺編輯、前臺評論的簡單 blog 系統。 ### **Tips** 1. 環境要求:PHP 7.0+,MySQL 5.1+ 2. 本教程不推薦完全不懂 PHP 與 MVC 編程的人學習,Laravel 的學習曲線不僅僅是陡峭,而且耗時很長,請先做好心理準備。 3. 這不是 “一步一步跟我做” 教程。本教程需要你付出一定的心智去解決一些或大或小的隱藏任務,以達到真正理解 Laravel 運行邏輯的目的。 4. 我使用 Safari 截圖是為了好看,你們在開發時記得選擇 Chrome 哦~ ## 開始學習 ### **1\. 安裝** 許多人被攔在了學習 Laravel 的第一步:安裝。并不是因為安裝有多復雜,而是因為【眾所周知的原因】。在此我推薦一個 composer 全量中國鏡像:[http://pkg.phpcomposer.com](http://pkg.phpcomposer.com/)。啟用 Composer 鏡像服務作為本教程的第一項小作業請自行完成哦。 鏡像配置完成后,在終端(Terminal 或 CMD)里切換到你想要放置該網站的目錄下(如 C:\\wwwroot、/Library/WebServer/Documents/、/var/www/html、/etc/nginx/html 等),運行命令: ~~~shell composer create-project laravel/laravel learnlaravel5 ^5.5 ~~~ 然后,稍等片刻,當前目錄下就會出現一個叫 learnlaravel5 的文件夾,安裝完成啦~ ### **2\. 運行** 為了盡可能地減緩學習曲線,推薦大家使用 PHP 內置 web server 驅動我們的網站。運行以下命令: ~~~shell cd learnlaravel5/public php -S 0.0.0.0:1024 ~~~ 這時候訪問`http://127.0.0.1:1024`就是這個樣子的: [![](https://camo.githubusercontent.com/07d7087f77700bd9330ad493be937f9e02cc92e0/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363031303136353339382e6a70673f743d32)](https://camo.githubusercontent.com/07d7087f77700bd9330ad493be937f9e02cc92e0/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363031303136353339382e6a70673f743d32) 我在本地 hosts 中綁定了 fuck.io 到 127.0.0.1,所以截圖中我的域名是 fuck.io 而不是 127.0.0.1,其實他們是完全等價的。跟過去幾年比,有一件大快人心的大好事,`fonts.googleapis.com`網站已經轉移到了墻內,不會再“白屏”了。 至于為什么選擇 1024 端口?因為他是 \*UNIX 系統動態端口的開始,是我們不需要 root 權限就可以隨意監聽的數值最小的端口。 另外,如果你不熟悉 PHP 運行環境搭建的話不要輕易嘗試使用 Apache 或 Nginx 驅動 Laravel,特別是在開啟了 SELinux 的 Linux 系統上跑這倆貨。關于 Laravel 在 Linux 上部署的大坑,我可能要單寫一篇長文分享給寶寶們。(說了一年了也沒見寫呀) ### **3\. 體驗牛逼閃閃的 Auth 系統** Laravel 利用 PHP5.4 的新特性[trait](http://php.net/manual/zh/language.oop5.traits.php)內置了非常完善好用的簡單用戶登錄注冊功能,適合一些不需要復雜用戶權限管理的系統,例如公司內部用的簡單管理系統。 激活這個功能非常容易,運行以下命令: ~~~html php artisan make:auth ~~~ 訪問`http://fuck.io:1024/login`,看到以下頁面: [![](https://camo.githubusercontent.com/a9d216fd47dcbb1bd3729fa5ecf38106f5f1ff7b/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363031363333383633382e6a70673f743d31)](https://camo.githubusercontent.com/a9d216fd47dcbb1bd3729fa5ecf38106f5f1ff7b/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363031363333383633382e6a70673f743d31) ### **4\. 連接數據庫** 接下來我們要連接數據庫了,請自行準備好 MySQL 服務哦。 #### **a. 修改配置** 不出意外的話,learnlaravel5 目錄下已經有了一個 .env 文件,如果沒有,可以復制一份 .env.example 文件重命名成 .env,修改下面幾行的值: ~~~shell DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel5 DB_USERNAME=root DB_PASSWORD=password ~~~ 推薦新建一個名為 laravel5 的數據庫(編碼設置為 utf8mb4),并且使用 root 賬戶直接操作,降低學習數據庫的成本。 數據庫配置好之后,在登錄界面填寫任意郵箱和密碼,點擊 Login,你應該會得到以下畫面: [![](https://camo.githubusercontent.com/3373a697bd90199d76b632d1a0cc94ab427b0e39/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363033373238383339322e6a70673f743d31)](https://camo.githubusercontent.com/3373a697bd90199d76b632d1a0cc94ab427b0e39/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363033373238383339322e6a70673f743d31) 它說 users 表不存在,接下來我們將見識 Laravel 另外一個實用特性。 > tip:如果你下載了我的示例代碼,默認是跑不起來的,還需要生成 .env,運行 composer update 填充 vendor 文件夾等操作,如果部署在 Linux 上,用的 Apache 或 Nginx,還需要設置文件夾權限:`chmod 777 -R storage bootstrap/cache` #### **b. 進行數據庫遷移(migration)** 運行命令: ~~~shell php artisan migrate ~~~ 我們得到了如下結果: ~~~shell ? php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table ~~~ 數據庫遷移成功!趕快打開[http://fuck.io:1024/home](http://fuck.io:1024/home)點擊右上角的注冊按鈕注冊一個用戶試試吧~ 下圖是本寶寶注冊了一個 username 為 1 用戶: [![](https://camo.githubusercontent.com/0289ae8e12890e81f314479f314fe459ffb5d592/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363034303832383433312e6a7067)](https://camo.githubusercontent.com/0289ae8e12890e81f314479f314fe459ffb5d592/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034363034303832383433312e6a7067) #### **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 中最慢的地方,迄今無法解決。(路由、自動載入、配置分散、視圖引發的性能問題都通過緩存幾乎徹底解決了,Composer Autoload 巨量的性能消耗也被 PHP7 手起刀落解決了) 當然,我們還是要承襲第一版教程中對 Eloquent ORM 的描述:鵝妹子英! > 如果你想深入地了解 Eloquent,可以閱讀系列文章:[深入理解 Laravel Eloquent(一)——基本概念及用法](http://mp.weixin.qq.com/s?__biz=MzI0NjcxNDYzOQ==&mid=100000057&idx=1&sn=97ecaca16a6aba85ea269a41abb3fe70&chksm=69ba59595ecdd04f3a01e2851e0c580e490fe172e1618a745c0e8ee34f05796a025dda1dade0#rd) #### **a. Eloquent 是什么** Eloquent 是 Laravel 內置的 ORM 系統,我們的 Model 類將繼承自 Eloquent 提供的 Model 類,然后,就天生具備了數十個異常強大的函數,從此想干啥事兒都是一行代碼就搞定。 經過了三年多的大規模使用,我發現 Eloquent 另辟蹊徑采用和 Java 技術完全不同的思路解決了多人開發耦合過重的問題:數據庫相關操作全部用一句話解決,Model 中不寫共用函數,大幅降低了 bug 幾率。什么?你說性能?軟件工程研究的對象是人,性能的優先級比代碼格式規范都低好嘛。我時刻謹記:代碼是寫給人看的,只是恰好能運行。 #### **b. 怎么用?** 我們使用 Artisan 工具新建 Model 類及其附屬的 Migration 和 Seeder(數據填充)類。 運行以下命令: ~~~shell php artisan make:model Article ~~~ 去看看你的 app 目錄,下面是不是多了一個 Article.php 文件?那就是 Artisan 幫我們生成的 Model 文件: ~~~html <?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { // } ~~~ 如此簡潔有力的代碼,隱藏了背后極高的難度和巨大的復雜度,讓我們閉上眼睛,靜靜地感受 Laravel 的優雅吧 (~ ̄▽ ̄)~ ### **下面是幾個簡單的例子:** #### **找到 id 為 2 的文章打印其標題** ~~~html $article = Article::find(2); echo $article->title; ~~~ #### **查找標題為“我是標題”的文章,并打印 id** ~~~html $article = Article::where('title', '我是標題')->first(); echo $article->id; ~~~ #### **查詢出所有文章并循環打印出所有標題** ~~~html $articles = Article::all(); // 此處得到的 $articles 是一個對象集合,可以在后面加上 '->toArray()' 變成多維數組。 foreach ($articles as $article) { echo $article->title; } ~~~ #### **查找 id 在 10~20 之間的所有文章并打印所有標題** ~~~html $articles = Article::where('id', '>', 10)->where('id', '<', 20)->get(); foreach ($articles as $article) { echo $article->title; } ~~~ #### **查詢出所有文章并循環打印出所有標題,按照 updated\_at 倒序排序** ~~~html $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 目錄下運行命令: ~~~shell php artisan make:migration create_articles_table ~~~ 成功之后打開`learnlaravel5/database/migrations`,你會發現有一個名為 2\*\*\*\*\*\_create\_articles\_table 的文件被創建了。我們修改他的 up 函數為: ~~~html 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 中的數據表,運行命令: ~~~shell php artisan migrate ~~~ 執行成功后,articles 表已經出現在數據庫里了: [![](https://camo.githubusercontent.com/5a5c552f1195a9251cd6b525c6a27ff78a288ba0/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034373031393633343333322e6a7067)](https://camo.githubusercontent.com/5a5c552f1195a9251cd6b525c6a27ff78a288ba0/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034373031393633343333322e6a7067) 上圖中的軟件叫 Sequel Pro,是一個開源的 MAC 下 MySQL GUI 管理工具,超好用,推薦給用 MAC 的同學。 #### **b. 使用 artisan 生成 Seeder** Seeder 是我們接觸到的一個新概念,字面意思為播種機。Seeder 解決的是我們在開發 web 應用的時候,需要手動向數據庫中填入假數據的繁瑣低效問題。 運行以下命令創建 Seeder 文件: ~~~shell php artisan make:seeder ArticleSeeder ~~~ 我們會發現`learnlaravel5/database/seeds`里多了一個文件`ArticleSeeder.php`,修改此文件中的 run 函數為: ~~~html 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 命名空間 解惑》](http://mp.weixin.qq.com/s?__biz=MzI0NjcxNDYzOQ==&mid=100000064&idx=1&sn=7a7c7e390a9f7719b8175a660ef890d6&chksm=69ba59205ecdd0362448e75201eba4454c85bfb916308d01289eb9729ef11b0f0cc21db0dedd#rd),很容易理解的。 接下來我們把 ArticleSeeder 注冊到系統內。修改`learnlaravel5/database/seeds/DatabaseSeeder.php`中的 run 函數為: ~~~html public function run() { $this->call(ArticleSeeder::class); } ~~~ 由于 database 目錄沒有像 app 目錄那樣被 composer 注冊為 psr-4 自動加載,采用的是[psr-0 classmap 方式](https://github.com/johnlui/Learn-Laravel-5/blob/laravel5.2/composer.json#L19-L21),所以我們還需要運行以下命令把`ArticleSeeder.php`加入自動加載系統,避免找不到類的錯誤: ~~~shell composer dump-autoload ~~~ 然后執行 seed: ~~~shell php artisan db:seed ~~~ 你應該得到如下結果: ~~~html ? php artisan db:seed Seeding: ArticleSeeder ~~~ **這時候刷新一下數據庫中的 articles 表,會發現已經被插入了 10 行假數據:** [![](https://camo.githubusercontent.com/d90595c15cd86dba97b53e9021d2d2df638dec1e/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034373031393136393935352e6a70673f743d34)](https://camo.githubusercontent.com/d90595c15cd86dba97b53e9021d2d2df638dec1e/687474703a2f2f716e2e6c7677656e68616e2e636f6d2f323031372d30392d30362d31353034373031393136393935352e6a70673f743d34)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看