0. 默認條件
本文默認你已經有配置完善的PHP+MySQL運行環境,懂得PHP網站運行的基礎知識。跟隨本教程走完一遍,你將會得到一個基礎的包含登錄的簡單blog系統,並將學會如何使用一些強大的Laravel插件和composer包(Laravel插件也是composer包)。
軟件版本:PHP 5.4+,MySQL 5.1+
1. 安裝
許多人被攔在了學習Laravel的第一步,安裝。並不是因為安裝教程有多復雜,而是因為【眾所周知的原因】。在此我推薦一個composer全量中國鏡像:http://pkg.phpcomposer.com/。推薦“修改 composer 的配置文件”方式配置。我在寫此教程時用此鏡像測試,安裝失敗,若你也出現這種情況,可以嘗試另一個composer中國鏡像:http://composer-proxy.com/。
鏡像配置完成後,切換到你想要放置該網站的目錄下,運行命令:
復制代碼 代碼如下:
composer create-project laravel/laravel learnlaravel
然後,稍等片刻,當前目錄下就會出現一個叫 learnlaravel 的文件夾,這時候如果你通過浏覽器訪問 learnlaravel/public/ 目錄,基本都會顯示 Error in exception handler. ,這是因為 learnlaravel/app/storage 目錄沒有777權限,設置好權限即可看見頁面如下圖:
恭喜你~Laravel安裝成功!
不想配置鏡像的同學,可以使用 Laravel 界非常著名的超超搞得安裝神器:https://github.com/overtrue/latest-laravel
2. 必要插件安裝及配置
我們使用著名的Sentry插件來構建登錄等權限驗證系統。
打開 ./composer.json ,變更為:
復制代碼 代碼如下:
"require": {
"laravel/framework": "4.2.*",
"cartalyst/sentry": "2.1.4"
},
然後,在項目根目錄下運行命令
復制代碼 代碼如下:
composer update
然後稍等一會兒,它會提示 cartalyst/sentry 2.1.4安裝完成。
同理,我們將安裝一個開發用的非常強大的插件,way/generators,這是它在composer庫中的名字。在 composer.json中增加:
復制代碼 代碼如下:
"require-dev": {
"way/generators": "~2.0"
},
放在“require”的下面。
運行 composer update,之後在 ./app/config/app.php 中增加配置:
復制代碼 代碼如下:
'Way\Generators\GeneratorsServiceProvider'
安裝完成過,在命令行中運行 php artisan,就可以看到這個插件帶來的許多新的功能。
有人會問,為什麼用了國內鏡像還是如此之慢?其實composer在update的時候最慢的地方並不是下載,而是下載之前的依賴關系解析,由於Laravel依賴的composer包非常之多,PHP腳本的執行速度又比較慢,所以每次update等個兩三分鐘很正常,習慣就好。
3. 數據庫建立及遷移
數據庫配置文件位於 ./app/config/database.php,我們需要把“connections”中的“mysql”項改成我們需要的配置。下面是我的配置:
復制代碼 代碼如下:
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'laravel',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => 'l4_',
),
prefix為表前綴,這個Laravel會幫我們自動維護,大膽寫上不用擔心。
這時候你需要去數據庫建立此數據庫,然後在命令行中輸入:
復制代碼 代碼如下:
php artisan migrate --package=cartalyst/sentry
執行完成後,你的數據庫裡就有了5張表,這是sentry自己建立的。sentry在Laravel4下的配置詳情見 https://cartalyst.com/manual/sentry#laravel-4,我大致說一下:
在 ./app/config/app.php 中 相應的位置 分別增加以下兩行:
復制代碼 代碼如下:
'Cartalyst\Sentry\SentryServiceProvider',
'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',
權限系統的數據庫配置到此為止。
我們的簡單blog系統將會有兩種元素,Article和Page,下面我們將創建articles和pages數據表,命令行運行:
復制代碼 代碼如下:
php artisan migrate:make create_articles_table --create=articles
php artisan migrate:make create_pages_table --create=pages
這時候,去到 ./app/database/migrations,將會看到多出了兩個文件,這就是數據庫遷移文件,過一會我們將操作artisan將這兩個文件描述的兩張表變成數據庫中真實的兩張表,放心,一切都是自動的。
下面,在***_create_articles_table.php中修改:
復制代碼 代碼如下:
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->string('slug')->nullable();
$table->text('body')->nullable();
$table->string('image')->nullable();
$table->integer('user_id');
$table->timestamps();
});
在***_create_pages_table.php中修改:
復制代碼 代碼如下:
Schema::create('pages', function(Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->string('slug')->nullable();
$table->text('body')->nullable();
$table->integer('user_id');
$table->timestamps();
});
下面,就是見證奇跡的時刻,在命令行中運行:
復制代碼 代碼如下:
php artisan migrate
這時候數據庫中的articles表和pages表就建立完成了。
4. 模型 Models
接下來我們將接觸Laravel最為強大的部分,Eloquent ORM,真正提高生產力的地方,借用庫克的話說一句,鵝妹子英!
我們在命令行運行下列語句以創建兩個model:
復制代碼 代碼如下:
php artisan generate:model article
php artisan generate:model page
這時候,在 ./app/models/ 下就出現了兩個model文件。這兩個類繼承了Laravel提供的核心類 \Eloquent。
5. 數據庫填充
分別運行下列命令:
復制代碼 代碼如下:
php artisan generate:seed page
php artisan generate:seed article
這時,在 ./app/database/seeds/ 下就出現了兩個新的文件,這就是我們的數據庫填充文件。Laravel提供自動數據庫填充,十分方便。
generator默認使用Faker\Factory作為隨機數據生成器,所以我們需要安裝這個composer包,地址是 https://packagist.org/packages/fzaninotto/faker ,跟generator一起安裝在 require-dev 中即可。具體安裝請自行完成,可以參考Sentry和Generator,這是第一次練習。
接下來,分別更改這兩個文件:
復制代碼 代碼如下:
Article::create([
'title' => $faker->sentence($nbWords = 6),
'slug' => 'first-post',
'body' => $faker->paragraph($nbSentences = 5),
'user_id' => 1,
]);
Page::create([
'title' => $faker->sentence($nbWords = 6),
'slug' => 'first-page',
'body' => $faker->paragraph($nbSentences = 5),
'user_id' => 1,
]);
然後,我們需要在 DatabaseSeeder.php 中增加兩行,讓Laravel在seed的時候會帶上我們新增的這兩個seed文件。
復制代碼 代碼如下:
$this->call('ArticleTableSeeder');
$this->call('PageTableSeeder');
下面就要真正的把數據填充進數據庫了:
復制代碼 代碼如下:
php artisan db:seed
操作完成以後去數據庫看看,數據已經填充進去了,article和page各10行。