国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel 5系列教程五:MVC的基本流程

mrcode / 2152人閱讀

摘要:原文來(lái)自免費(fèi)視頻教程地址期間受到很多私事影響,終于還是要好好寫寫的教程了。我們來(lái)實(shí)現(xiàn)這個(gè)功能顯示文章詳情通過(guò)文章展示來(lái)快速體驗(yàn)上面的流程注冊(cè)路由來(lái)到中,我們?cè)黾右粋€(gè)路由上面的路由指定我們需要加載中的方法。

原文來(lái)自: https://jellybool.com/post/programming-with-laravel-5-model-controller-view-basic-workflow

免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-basic

期間受到很多私事影響,終于還是要好好寫寫laravel的教程了。

上一篇我們說(shuō)了數(shù)據(jù)庫(kù)和Eloquent的基本用法,如計(jì)劃一樣,這一篇文章我們說(shuō)說(shuō)Laravel中Model,Controller,Views的工作流程,也就是下面這個(gè)順序:

1.注冊(cè)路由 ---> 2.創(chuàng)建控制器 ---> 3. 控制器中獲取數(shù)據(jù)庫(kù)數(shù)據(jù) ---> 4.在視圖中展示數(shù)據(jù)

英文的表達(dá)可能會(huì)更加貼切一點(diǎn):

1.register routes ---> 2.make a controller ---> 3.fetch data from database ---> 4. load a view to display data

在laravel中,最常見的流程就是這個(gè)樣子的,我們?cè)趯?shí)現(xiàn)某個(gè)功能的時(shí)候,通常就是走上面的這個(gè)流程。比如我們這個(gè)blog項(xiàng)目中,我們需要實(shí)現(xiàn)下面的功能:

1. 展示所有的文章  // blog首頁(yè)
2. 展示一篇文章   //文章詳情頁(yè)
3. 創(chuàng)建一篇文章   // 文章發(fā)布頁(yè)面
4. 修改一篇文章  // 文章修改頁(yè)面
5. 刪除一篇文章  // 后臺(tái)管理

在這一篇文章中,我們集中精力解決一下第一個(gè)功能,所以我們按照上面的流程來(lái)走一遍:

PS : 上次我們使用artisan tinker這個(gè)工具在命令行中對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行了CRUD,現(xiàn)在就要將這些應(yīng)用到MVC當(dāng)中了。

注冊(cè)路由

我們這里會(huì)從頭開始,也就是會(huì)先刪除app/Http/Controllers/ArticleController.php這個(gè)文件

在系列文章的第二篇當(dāng)中,我們?cè)?b>app/Http/routes.php中注冊(cè)了我們首頁(yè)的路由:

Route::get("/","ArticleController@index");

可以直接使用這個(gè)路由,所以我們可以進(jìn)入下一步。

創(chuàng)建控制器

這里需要注意的是,如果你使用了Homestead,請(qǐng)先ssh登錄到你的虛擬機(jī)中執(zhí)行命令;還有就是,請(qǐng)先刪除之前課程遺留的ArticleController,如果你想偷懶,可以跳過(guò)這一步

創(chuàng)建控制器的時(shí)候你可以手動(dòng)創(chuàng)建,不過(guò)還是推薦使用artisan這個(gè)命令行工具,在項(xiàng)目目錄之下,命令行執(zhí)行:

php artisan make:controller ArticleController --plain

這里需要說(shuō)明的是--plain這個(gè)參數(shù)表明只要一個(gè)簡(jiǎn)單的controller,里面不需要生成一堆如show(),create()等方法。

控制器中獲取數(shù)據(jù)庫(kù)數(shù)據(jù)

打開這個(gè)重新創(chuàng)建的ArticleController.php:

class ArticleController extends Controller
{

    public function index()
    {
        $articles = Article::all();

        return $articles;
    }
}

我們創(chuàng)建一個(gè)index()方法,這是因?yàn)槲覀冊(cè)?b>routes.php當(dāng)中注冊(cè)的路由指定要加載ArticleControllerindex()方法,我們?cè)?b>index()方法中使用Article::all()將數(shù)據(jù)庫(kù)中articles這張表中的所有的記錄查找出來(lái),直接返回。

我們用瀏覽器來(lái)訪問試試,會(huì)看到類似下面這個(gè)情況:

對(duì),如你看到的一樣,如果你直接返回查找到得數(shù)據(jù),Laravel會(huì)默認(rèn)將這些數(shù)據(jù)轉(zhuǎn)換成json格式,因?yàn)閘aravel可能是出于這樣的考慮:一般這種情況下地返回,通常都是在創(chuàng)建api功能,比如你為你的一個(gè)手機(jī)App寫的api一樣,json數(shù)據(jù)無(wú)疑是很好的選擇。

順便安利一下大家使用百度團(tuán)隊(duì)的這個(gè)FeHelper這個(gè)chrome插件:

https://github.com/zxlie/FeHelper

但是在這里我們并不是想直接返回json,取而代之的是,我們的目的是加載視圖,將數(shù)據(jù)展示出來(lái)。所以這就是我們下一步的工作了

在視圖中展示數(shù)據(jù)

這里我們首先需要修改的是ArticleController中的index()方法:

public function index()
{
    $articles = Article::all();

    return view("articles.index",compact("articles"));
}

我們只是修改了return這一行的代碼,使用view()方法加載視圖,這個(gè)視圖就是位于resources/views/articles/中的index.blade.php(我們還沒有創(chuàng)建),最后使用compact("articles")將數(shù)據(jù)傳給視圖文件:關(guān)于這個(gè)視圖傳遞變量的問題,你可以參考教程的第三篇

然后,我們需要?jiǎng)?chuàng)建我們的視圖文件,在resources/views/articles/下創(chuàng)建index.blade.php文件:

@extends("app")
@section("content")
 

這是index.blade.php

@endsection

寫上上面的內(nèi)容,關(guān)于視圖文件的blade模板,可以參考教程的第三篇,然后瀏覽器訪問一下看看:

視圖文件正確之后,我們需要將傳遞給視圖的$articles變量的內(nèi)容展示出來(lái):

@extends("app")
@section("content")
    @foreach($articles as $article)
        

{{ $article->title }}

{{ $article->intro }}


@endforeach @endsection

我們使用@foreach來(lái)將所有的文章循環(huán)出來(lái),瀏覽器訪問看看:

這里我們的首頁(yè)展示也就基本完成了,然而在我們的實(shí)際blog中,我們會(huì)在每個(gè)標(biāo)題出給出我們的文章鏈接,也就是為每個(gè)文章添加一個(gè)詳情展示的頁(yè)面,用戶點(diǎn)擊文章的鏈接之后,我們展示相應(yīng)的文章詳情。我們來(lái)實(shí)現(xiàn)這個(gè)功能

顯示文章詳情

通過(guò)文章展示來(lái)快速體驗(yàn)上面的流程:

1.注冊(cè)路由

來(lái)到app/Http/routes.php中,我們?cè)黾右粋€(gè)路由:

Route::get("articles/{id}","ArticleController@show");

上面的路由articles/{id}指定我們需要加載ArticleController中的show()方法。這里需要注意的是{id}這個(gè)表達(dá):這是表示id是一個(gè)路由變量,也就是當(dāng)我們?cè)L問類似下面這兩個(gè)路由的時(shí)候:

http://blog.dev/articles/1 //id 為1
http://blog.dev/articles/foo // id為foo

先不急著訪問,因?yàn)槲覀冞€沒有創(chuàng)建show()方法,這里只是作為說(shuō)明。

在laravel中,路由變量寫在{}括號(hào)中,這個(gè)id對(duì)應(yīng)我們等下寫的show()方法的參數(shù)。

2.編寫show()

在ArticleController增加show()方法:

public function show($id)
{
    return $id;
}

我們?cè)?b>show($id)方法中,首先接受參數(shù)id,然后直接返回。現(xiàn)在我們可以訪問上面的兩個(gè)url了,看到的類似下面這個(gè)效果:

3.獲取數(shù)據(jù)

然而在show()方法中,我們也是需要從數(shù)據(jù)庫(kù)中加載獲取數(shù)據(jù),所以我們先修改show()方法:

public function show($id)
{
    $article = Article::find($id);
    return $article;
}

我們通過(guò)find()方法從數(shù)據(jù)庫(kù)中查找一條記錄,然后直接返回,我們來(lái)看看效果:

4.加載視圖

獲取數(shù)據(jù)之后,我們需要加載相應(yīng)地視圖來(lái)展示數(shù)據(jù),還是修改show()方法:

public function show($id)
{
    $article = Article::find($id);
    return view("articles.show",compact("article"));
}

類似地,我們使用view()加載show.blade.php,然后compact()將變量傳遞過(guò)去。所以我們?nèi)?chuàng)建show.blade.php視圖文件吧:

@extends("app")
@section("content")
        

{{ $article->title }}


{{ $article->content }}

@endsection

這里跟index.blade.php視圖文件差不多,我們只是去掉了@foreach,在來(lái)訪問一下看看:

到這里,我們的文章展示頁(yè)面也可以說(shuō)是完成了,然而當(dāng)我們?cè)L問這個(gè)下面這個(gè)鏈接的時(shí)候:

http://blog.dev/articles/3

報(bào)錯(cuò)了!

這是因?yàn)槲覀冊(cè)?b>show()方法中使用$article = Article::find($id);來(lái)查找一篇文章,但是我們的數(shù)據(jù)庫(kù)中的articles表并沒有id3的記錄,也就是id3的時(shí)候,$article變量已經(jīng)是null了,這個(gè)時(shí)候我們?nèi)绻€是希望在視圖中使用{{ $article->title }},所以才會(huì)出現(xiàn)錯(cuò)誤:

Trying to get property of non-object.... 

PS: 如果你想調(diào)試,看看$article到底是什么,你可以在laravel中使用dd($article)來(lái)調(diào)試

那這個(gè)要怎么解決呢?有兩種方法:

第一,自己寫個(gè)if條件判斷:

public function show($id)
   {
       $article = Article::find($id);
       if(is_null($article)){
           abort(404);
       }
       return view("articles.show",compact("article"));
   }

如果$article為空,直接abort()一個(gè)404頁(yè)面。再來(lái)訪問一下:

這里貌似還是會(huì)看到一堆錯(cuò)誤,為什么呢?那是因?yàn)樵?b>.env中我們?cè)O(shè)置了APP_DEBUG=true,所以還會(huì)有下面的一堆錯(cuò)誤,我們?cè)趯?shí)際的線上部署環(huán)境中,APP_DEBUG=false才是我們的設(shè)置。我們來(lái)體驗(yàn)一把將APP_DEBUG=false,見證一下我們的404頁(yè)面:

這個(gè)404頁(yè)面,你可以自定義:就是在resources/views/errors/文件夾下創(chuàng)建一個(gè)404.blade.php

實(shí)際例子就是這樣的(彩蛋):

https://jellybool.com/show404page

你也可以在我的blog地址欄隨便輸入一堆東西,看看找不到文章的時(shí)候是什么樣的404 page 。

第二,使用findOrFail()

上面的條件判斷其實(shí)很不錯(cuò)了,但是這里我還是推薦使用findOrFail()這個(gè)方法:

public function show($id)
    {
        $article = Article::findOrFail($id);
       
        return view("articles.show",compact("article"));
    }

findOrFail()表示首先嘗試find,如果找不到就fail,拋出一個(gè)Eloquent Exception,所以我們?cè)賮?lái)訪問嘗試一下:

我們應(yīng)該會(huì)得到一樣的結(jié)果.

然后我們回到我們的index.blade.php中為每篇文章添加鏈接:

  @foreach($articles as $article)
      

{{ $article->title }}

{{ $article->intro }}


@endforeach

訪問來(lái)看看:

注意我們這里直接使用了href="/articles/{{ $article->id }}"進(jìn)行鏈接,你也可以使用action()這個(gè)方法:

 @foreach($articles as $article)
        

id]) }}">{{ $article->title }}

{{ $article->intro }}


@endforeach

action()這個(gè)方法第一個(gè)參數(shù)表明要加載ArticleControllershow()方法,跟routes一樣,第二個(gè)參數(shù)用數(shù)組傳入相應(yīng)地參數(shù)[$article->id]

你還有第三種選擇,使用url()方法:

@foreach($articles as $article)
      

id) }}">{{ $article->title }}

{{ $article->intro }}


@endforeach

url()方法第一個(gè)參數(shù)傳入url路徑,第二個(gè)參數(shù)直接傳入變量。

上面的三種方法,選擇一種自己喜歡的就可以了。

下一節(jié)

就寫到這里吧,這一節(jié)大概也就是這樣的內(nèi)容了,不知道這樣介紹,大家對(duì)Laravel的Model Controller Views的工作流程清晰了沒,不清晰的話可以評(píng)論問我。。。

下一節(jié),我即將說(shuō)說(shuō)怎么實(shí)現(xiàn)創(chuàng)建一篇文章,就會(huì)順帶介紹Laravel的Forms表單。

最后,

Happy Hacking

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21111.html

相關(guān)文章

  • Laravel 5 系列入門教程(一)【最適合中國(guó)人 Laravel 教程

    摘要:原文發(fā)表在我的個(gè)人網(wǎng)站系列入門教程一最適合中國(guó)人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。在此我推薦一個(gè)全量中國(guó)鏡像。 原文發(fā)表在我的個(gè)人網(wǎng)站:Laravel 5 系列入門教程(一)【最適合中國(guó)人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大...

    EscapedDog 評(píng)論0 收藏0
  • Laravel 5 系列教程三:視圖變量傳遞和Blade

    摘要:所以在視圖中我們需要這樣輸出這里應(yīng)寫成,而不是。這個(gè)時(shí)候注意更改視圖的變量輸出。 原文來(lái)自: https://jellybool.com/post/programming-with-laravel-5-blade-views-with-var 系列文章: http://segmentfault.com/blog/jellybool 免費(fèi)視頻教程地址 https://laravist...

    jindong 評(píng)論0 收藏0
  • Laravel 5 系列教程二:路由,視圖,控制器工作流程

    摘要:但是不用擔(dān)心,我們后續(xù)的教程會(huì)陸續(xù)講解相關(guān)的內(nèi)容。所以上面的路由注冊(cè)其實(shí)就是負(fù)責(zé)解決訪問的時(shí)候的響應(yīng)。 原文來(lái)自:https://jellybool.com/post/programming-with-laravel-5-routers-views-controllers-workflow 免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-b...

    awesome23 評(píng)論0 收藏0
  • 寫這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲抱歉了。熟悉我的人都知道我寫博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說(shuō)聲:抱歉了!。自己這段時(shí)...

    JerryWangSAP 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<