larablog 系列文章 01 - 安裝配置和模版引擎

這是系列文章的開頭,是創建網站的第一步,這部分的內容我們將下載并配置 Laravel 本地開發環境。創建博客應用,它會包含主要的 HTML 結構,我們可以通過本地進行瀏覽訪問。

配置開發環境

集成開發環境 XAMPP

開發環境的搭建方式有很多,比如 Homestead 開發環境,為了讓新手能快速搭建開發環境,我們選擇了集成開發環境這種容易快速上手使用的方案,如果你已經了解其它的方式或有精力去研究,歡迎查閱其它文章,這里不過多闡述。

XAMPP(Apache+MySQL+PHP+PERL)是一個功能強大的建站集成軟件包。它可以在 Windows、Linux、Solaris、Mac OS X 等多種操作系統下安裝使用,支持多語言:英文、簡體中文、繁體中文、韓文、俄文、日文等。

Windows 下還可以用 WAMP 集成開發包,和 XAMPP 類似,有需要話也可以進行了解

你可以在這里下載適合你系統的版本:
https://www.apachefriends.org/zh_cn/download.html

安裝完成后,你可以通過控制面板啟動相應的服務,控制面板如下:

Mac 系統中控制面板如下,Windows 系統與之大同小異。

Mac 下的控制面板

在你啟動這 MySQL, Apache 這 2 個服務后,你就可以通過下面的地址來訪問數據庫:

http://localhost/phpmyadmin/

phpMyAdmin 是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的數據庫管理工具,讓管理者可用Web接口管理MySQL數據庫。

你通過頁面登錄即可訪問并管理數據庫

注意:XAMPP 默認安裝時設定的 MySQL 賬戶 root 密碼為空

數據庫配置

由于項目中需要用到數據庫,這里我們先創建項目的數據庫 larablog

創建數據庫

構建應用

創建應用

首先,通過命令行工具進入你的 Web 目錄下:

Web 目錄即 XAMPP 安裝目錄下的 htdocs 目錄

我們這里通過 Composer 創建項目,執行如下命令:

composer create-project laravel/laravel larablog --prefer-dist "5.1.*"

Laravel 5.1 LTS 是 Laravel 歷史上第一個提供 LTS(長期支持 - long-time support) 支持的版本。由于不同版本特性之間的區別這里無法詳細講解,所以我們這里選用了 LTS 版,了解一個長期穩定的版本相對來說很有必要。

配置項目的數據信息

Laravel 安裝后會在目錄下生成名為 .env 的配置文件,通常我們不會該文件納入版本管理工具(比如 git),我們在本地開發和生產服務器上不同環境的配置信息也是區別于此。在項目目錄下還有一個 .env.example 文件,是作為配置模板而存在。

讓我們來編輯 .env 文件,設置數據庫信息:

這個文件里羅列的很多已經設定好的配置,默認用于本地開發環境,如果是生產環境,有些配置需要調整,這里我們主要是設置數據相關的配置。

找到如下部分,對內容進行更改:

DB_DATABASE=larablog
DB_USERNAME=root
DB_PASSWORD=

這里,數據庫的名稱使用的是開頭創建的 larablog,同時數據庫密碼為空。

默認結構說明

一個新安裝的 Laravel 根目錄包含許多個文件夾:

app 目錄,如你所料,這里面包含應用程序的核心代碼。

bootstrap 目錄包含了幾個框架啟動跟自動加載設置的文件。以及在 cache 文件夾中包含著一些框架在啟動性能優化時所生成的文件。

config 目錄,顧名思義,包含所有應用程序的配置文件。

database 目錄包含數據庫遷移與數據填充文件。如果你愿意的話,你也可以在此文件夾存放 SQLite 數據庫。

public 目錄包含了前端控制器和資源文件(圖片、JavaScript、CSS,等等)。

resources 目錄包含了視圖、原始的資源文件 (LESS、SASS、CoffeeScript) ,以及語言包。

storage 目錄包含編譯后的 Blade 模板、基于文件的 session、文件緩存和其它框架生成的文件。此文件夾分格成 appframework,及 logs 目錄:

  • app 目錄可用于存儲應用程序使用的任何文件。
  • framework 目錄被用于保存框架生成的文件及緩存。
  • logs 目錄包含了應用程序的日志文件。

tests 目錄包含自動化測試。這有一個現成的 PHPUnit 例子。

vendor 目錄包含你的 Composer 依賴模塊。

路由

在項目中 app/Http/routes.php 是用用程序的路由文件,請求的處理都通過這里進行進行配置。

默認如下:

<?php

Route::get('/', function () {
    return view('welcome');
});

這里配置的路由信息是,訪問網站根路徑是,顯示視圖 welcome 的內容。

視圖 welcome 位于 resources/views/welcome.blade.php

運行項目

在項目所在目錄下,通過命令行執行 php artisan serve 啟動應用,操作如下:

?  larablog php artisan serve
Laravel development server started on http://localhost:8000/

Laravel 的控制臺命令啟動了 PHP 內置服務器,讓我們可以不需要單獨設立虛擬站點也可以訪問應用。是一種很快速便捷的運行辦法。

說明一下,本身我們通過 XAMPP 內置的 Apache 也可以配置虛擬站點進行訪問,因為這種運行 PHP 內置服務器的方式相對更方便,所以就沒有提及它。這里主要為了避免新手學習重要的內容時被一些細枝末節的問題所干擾,后期自己可以了解如何配置虛擬站點來運行應用,尤其是當使用了 Homestead 這樣的開發環境。

好了,如果你通過瀏覽器打開頁面 http://localhost:8000/ 將會看到如下頁面:

welcome
嘗試增加一些內容

接下來,我們嘗試增加一些簡單的內容,感受一下。

app/Http/routes.php 中添加一個路由配置:

Route::get('/hello/{name}', function($name) {
    return 'Hello '. $name;
});

我們配置了一個路由用于輸出歡迎內容。

訪問 http://localhost:8000/hello/larablog 即可看到如下內容:

Hello larablog

模板引擎

在我們對 Laravel 構建應用有個基礎了解后,我們先從模版開始構建站點的結構。Laravel 使用了 Blade 作為模板引擎。

Blade 是 Laravel 所提供的一個簡單且強大的模板引擎。相較于其它知名的 PHP 模板引擎,Blade 并不會限制你必須得在視圖中使用 PHP 代碼。所有 Blade 視圖都會被編譯緩存成普通的 PHP 代碼,一直到它們被更改為止。這代表 Blade 基本不會對你的應用程序生成負擔。

Blade 視圖文件使用 .blade.php 做為擴展名,通常保存于 resources/views 文件夾內。

基礎布局

首先,我們要為整個博客站點建立一個基礎視圖模板,整個站點視圖基于這個模板,繼承該視圖并顯示。

在項目錄下新建文件 resources/layouts/app.blade.php ,內容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
        <title>@yield('title') - larablog</title>

        @section('stylesheets')
            <link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />
        @show

        <link rel="shortcut icon" href="/favicon.ico" />
    </head>
    <body>

        <section id="wrapper">
            <header id="header">
                <div class="top">
                    @section('navigation')
                        <nav>
                            <ul class="navigation">
                                <li><a href="/">Home</a></li>
                                <li><a href="#">About</a></li>
                                <li><a href="#">Contact</a></li>
                            </ul>
                        </nav>
                    @show
                </div>

                <hgroup>
                    <h2>@yield('blog_title', '<a href="/">larablog</a>')</h2>
                    <h3>@yield('blog_tagline', '<a href="/">creating a blog in Laravel</a>')</h3>
                </hgroup>
            </header>

            <section class="main-col">
                @yield('body')
            </section>

            <aside class="sidebar">
                @include('partials.sidebar')
            </aside>

            <div id="footer">
                @section('footer')
                    Laravel blog tutorial
                @show
            </div>
        </section>

        @yield('javascripts')
    </body>
</html>

如果你仔細看,會發現 @include('partials.sidebar') 這段代碼,我們額外引入了一個局部視圖。

所以,還需要建立一個局部頁面 resources/views/partials/sidebar.blade.php,內容如下:

@section('sidebar')
    Sidebar content
@show

app.blade.php 文件中包含了傳統的 HTML 語法。不過,請注意 @section@yield 命令。正如其名,@section 命令定義一個內容區塊,而 @yield 命令被用來 “顯示指定區塊” 的內容。

在默認情況下,Blade 模板中的 {{ }} 表達式將會自動調用 PHP 的 htmlentities 函數,以避免 XSS 攻擊。如果你不希望你的數據被轉義,可以使用下列的語法:

Hello, {!! $name !!}.

更多模板相關的信息請查看文檔 Blade TemplatesBlade 模板

stylesheets 內容區塊中,我們引入了一個樣式表:

<link href="{{ asset('css/screen.css') }}" type="text/css" rel="stylesheet" />

我們使用 asset 幫助函數來生成樣式資源所在的路徑,其函數作用如下:

// 根據目前請求的協定(HTTP 或 HTTPS)產生資源文件網址
asset('img/photo.jpg', $title, $attributes);

public/css/screen.css 的內容如下:

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{border:0;font-size:100%;font:inherit;vertical-align:baseline;margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:none}table{border-collapse:collapse;border-spacing:0}
body { line-height: 1;font-family: Arial, Helvetica, sans-serif;font-size: 12px; width: 100%; height: 100%; color: #000; font-size: 14px; }
.clear { clear: both; }


#wrapper { margin: 10px auto; width: 1000px; }
#wrapper a { text-decoration: none; color: #F48A00; }
#wrapper span.highlight { color: #F48A00; }


#header { border-bottom: 1px solid #ccc; margin-bottom: 20px; }
#header .top { border-bottom: 1px solid #ccc; margin-bottom: 10px; }
#header ul.navigation { list-style: none; text-align: right; }
#header .navigation li { display: inline }
#header .navigation li a { display: inline-block; padding: 10px 15px; border-left: 1px solid #ccc; }
#header h2 { font-family: 'Irish Grover', cursive; font-size: 92px; text-align: center; line-height: 110px; }
#header h2 a { color: #000; }
#header h3 { text-align: center; font-family: 'La Belle Aurore', cursive; font-size: 24px; margin-bottom: 20px; font-weight: normal; }


.main-col { width: 700px; display: inline-block; float: left; border-right: 1px solid #ccc; padding: 20px; margin-bottom: 20px; }
.sidebar { width: 239px; padding: 10px; display: inline-block; }


.main-col a { color: #F48A00; }
.main-col h1,
.main-col h2
{ line-height: 1.2em; font-size: 32px; margin-bottom: 10px; font-weight: normal; color: #F48A00; }
.main-col p { line-height: 1.5em; margin-bottom: 20px; }


#footer { border-top: 1px solid #ccc; clear: both; text-align: center; padding: 10px; color: #aaa; }

首頁視圖

我們已經建立好了基礎的布局模板。之后我們基于布局視圖建立的頁面通常和控制器方法有關,比如博客顯示頁面會有對應的博客顯示模板。

讓我們來建立首頁的控制器方法和與之相應的模板。

首先,建立控制器。在命令行中進入項目所在目錄,執行如下命令:

php artisan make:controller PageController --plain

該命令會幫助我們新建控制器文件 app/Http/Controllers/PageController.php,將其內容更改如下:

<?php

namespace App\Http\Controllers;

class PageController extends Controller
{

    public function index()
    {
        return view('pages.index');
    }

}

接下來,為這個控制器方法創建視圖,新建 resources/views/pages/index.blade.php,內容如下:

@extends('layouts.app')

@section('title', 'larablog')

@section('body')
    Blog homepage
@endsection

我們完成了首頁視圖,它繼承自基礎布局。接下來讓我們為首頁配置路由信息,編輯 app/Http/routes.php,將首頁的路由更改如下:

Route::get('/', 'PageController@index')->name('homepage');

此時,我們已為首頁定義了控制器方法,利用模板繼承構建了首頁的視圖,并配置了路由。
接下來便可以通過訪問 http://localhost:8000/ 查看首頁的實際顯示效果。

關于頁面

這個部分的最后任務是創建一個靜態頁面。將演示如何將其它頁面聯系在一起,同時進一步了解模板繼承相關的用法。

路由

當我們要創建一個頁面的時候,首先都會考慮該給它建立怎么樣的路由信息。這里,我們打開 app/Http/routes.php,添加如下內容:

Route::get('/about', 'PageController@about')->name('about');

控制器

打開新建的文件 app/Http/Controllers/PageController.php,添加新的控制器方法:

public function about()
{
    return view('pages.about');
}

視圖

至于視圖,我們創建一個新的文件位于 resources/views/pages/about.blade.php,內容如下:

@extends('layouts.app')

@section('title', 'About')

@section('body')
    <header>
        <h1>About larablog</h1>
    </header>
    <article>
        <p>Donec imperdiet ante sed diam consequat et dictum erat faucibus. Aliquam sit
        amet vehicula leo. Morbi urna dui, tempor ac posuere et, rutrum at dui.
        Curabitur neque quam, ultricies ut imperdiet id, ornare varius arcu. Ut congue
        urna sit amet tellus malesuada nec elementum risus molestie. Donec gravida
        tellus sed tortor adipiscing fringilla. Donec nulla mauris, mollis egestas
        condimentum laoreet, lacinia vel lorem. Morbi vitae justo sit amet felis
        vehicula commodo a placerat lacus. Mauris at est elit, nec vehicula urna. Duis a
        lacus nisl. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
        posuere cubilia Curae.</p>
    </article>
@endsection

這個頁面并沒有特殊的地方,我們只是模擬了一些頁面文字內容,通過控制器方法渲染了它。

頁面鏈接

我們現在的關于頁面可以正常訪問了,你可以通過 http://localhost:8000/about 訪問。
目前來說,我們沒有在博客上添加任何跟它有關的訪問鏈接,用戶還得想我們一樣輸入完整的網址。
接下來讓我們添加訪問這個頁面鏈接,同時了解如何通過路由來生成 URL。盡量不去使用如下的方式去鏈接頁面:

<a href="/contact">Contact</a>

這是通過硬連接的方式與其它頁面聯系在一起。這很常見,但這樣的做法存在一個問題就是,
如果您想在任何時候更改聯系人頁面的位置,您將必須找到所有對硬鏈接的引用并更改它們。

比較好的做法是利用 Laravel 中提供的方法來生成路徑和 URL:

// 產生給定路由名稱網址
route($route, $parameters, $absolute = true);

// 產生給定路徑的完整網址
url('path', $parameters = array(), $secure = null);

知道這一點之后,讓我們找到布局模板 resources/views/app.blade.php 頁面。

將導航 navigation 內容區塊的內容更改如下:

<nav>
    <ul class="navigation">
        <li><a href="{{ route('homepage') }}">Home</a></li>
        <li><a href="{{ route('about') }}">About</a></li>
        <li><a href="#">Contact</a></li>
    </ul>
</nav>

最后,更新 logo 的跳轉鏈接,同樣還是位于 resources/views/app.blade.php 文件中:

<hgroup>
    <h2>@section('blog_title')<a href="{{ route('homepage') }}">larablog</a>@show</h2>
    <h3>@section('blog_tagline')<a href="{{ route('homepage') }}">creating a blog in Laravel</a>@show</h3>
</hgroup>

現在刷新你的瀏覽器頁面,將會看到首頁和關于頁面如你所期望的鏈接在一起,并正常顯示。

總結

我們已經介紹了 Laravel 應用程序的基本內容,包括配置和啟動應用程序。同時也探索了 Laravel 程序背后的基本構件原理,包括路由、控制器、模板引擎的使用。

接下來我們將關注如何創建聯系人頁面。該頁面比“關于”頁面要稍微深入一些,因為它允許用戶提交表單與服務器交互。下一章講介紹包括表單提交、驗證、處理在內的相關內容。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容