成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 5系列教程十:實(shí)現(xiàn)文章的修改

pf_miles / 1291人閱讀

摘要:來(lái)看看具體的步驟注冊(cè)路由在中,注冊(cè)我們的編輯頁(yè)面的路由這個(gè)路由接受一個(gè)參數(shù),意為文章的,我們會(huì)需要根據(jù)這個(gè)來(lái)查詢我們要修改的文章。然后渲染視圖,并將查詢到的和傳給視圖。下面我打算再開一個(gè)系列說(shuō)說(shuō)的新特性

原文來(lái)自https://laravist.com/article/20

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

Laravist是我剛剛上線的Laravel社區(qū),有任何與Laravel相關(guān)的問(wèn)題可以到這里來(lái)問(wèn)我,我會(huì)盡力去幫大家解決問(wèn)題,后期會(huì)嘗試錄制一些視頻教程,形式大概是這樣的

https://laravist.com/lesson/2

我們之前的一系列文章綜合起來(lái)就實(shí)現(xiàn)了一個(gè)發(fā)布文章的整個(gè)流程,但是萬(wàn)一我們需要修改某篇文章的內(nèi)容呢?我們?cè)撊绾稳?shí)現(xiàn)呢?其實(shí),有了怎么創(chuàng)建一篇文章之后,我們實(shí)現(xiàn)編輯(更新)文章的思路很類似。這里可以值得注意的知識(shí)點(diǎn)就是Form::modelgetAttribute了。來(lái)看看具體的步驟:

注冊(cè)路由

routes.php中,注冊(cè)我們的編輯頁(yè)面的路由:

Route::get("article/edit/{id}","ArticleController@edit");

這個(gè)路由接受一個(gè)參數(shù):id,意為文章的id,我們會(huì)需要根據(jù)這個(gè)id來(lái)查詢我們要修改的文章。

編寫edit方法

根據(jù)路由,我們?cè)?b>ArticleController添加edit()方法:

public function edit($id)
    {
        $article = Article::findOrFail($id);
        $tags = Tag::lists("name", "id");
        return view("articles.edit",compact("article","tags"));
    }

很熟悉地,我們首先根據(jù)id來(lái)查詢到我們需要編輯的文章,對(duì)于$tags,我們采取跟create()方法一樣的方法,得到我們的$tags列表。然后渲染視圖,并將查詢到的$article$tags傳給視圖。

創(chuàng)建視圖

上面的edit()方法指定了渲染articles.edit(resources/views/articles/edit.blade.php)這個(gè)視圖,我們來(lái)創(chuàng)建之,這里為了便利,我們可以直接將create.blade.php這個(gè)視圖文件拷貝過(guò)來(lái):

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

修改文章:{{ $article->title }}

{!! Form::model($article,["url"=>"article/update"]) !!} {!! Form::hidden("id",$article->id) !!}
{!! Form::label("title","標(biāo)題:") !!} {!! Form::text("title",$article->title,["class"=>"form-control"]) !!}
{!! Form::label("content","正文:") !!} {!! Form::textarea("content",$article->content,["class"=>"form-control"]) !!}
{!! Form::label("published_at","發(fā)布日期") !!} {!! Form::input("date","published_at",$article->published_at->format("Y-m-d"),["class"=>"form-control"]) !!}
{!! Form::label("tag_list","選擇標(biāo)簽") !!} {!! Form::select("tag_list[]",$tags,null,["class"=>"form-control js-example-basic-multiple","multiple"=>"multiple"]) !!}
{!! Form::submit("修改文章",["class"=>"btn btn-success form-control"]) !!}
{!! Form::close() !!} @if($errors->any())
    @foreach($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif @endsection

這里我們注意下面這幾點(diǎn):

我們使用了Form::hidden()

這里我們使用這個(gè)目的(因?yàn)閔idden表單并不會(huì)展示給用戶看)就是為了后面在更新的時(shí)候更加便捷和暴力,因?yàn)橛辛?b>id,我們一切的事情都很好辦。

我們給Form input表單設(shè)置了初始值

通過(guò)類似{!! Form::text("title",$article->title,["class"=>"form-control"]) !!}中的$article->title的形式,我們給表單賦予了初始值。

我們使用了Form::model()

在聲明Form的時(shí)候,我們并不是簡(jiǎn)單的使用Form::open(),Form::model()首先需要將你要綁定的model傳進(jìn)來(lái),這里我們用的是$article,也就是我們?cè)?b>edit()方法查找到的$article,這個(gè)有什么好處呢?

一旦綁定Form::model(),在后面的input表單中即使你沒有設(shè)置初始值,laravel也會(huì)自動(dòng)為你匹配,然后
為你賦予初始值,這也是使用Form的好處之一,就比如上面的{!! Form::text("title",$article->title,["class"=>"form-control"]) !!},在Form::model()下,你完全可以像之前那樣寫:

{!! Form::text("title",null,["class"=>"form-control"]) !!}

你依然會(huì)得到相同的效果,但是這里為了更清晰,我直接賦了$article->title初始值。

我們又使用Carbon

在文章的published_at這個(gè)字段,我們借$article->published_at->format("Y-m-d")又一次感受到了Carbon的便利。

最后來(lái)看看我們的編輯頁(yè)面有沒有好:

仔細(xì)看其實(shí)就會(huì)發(fā)現(xiàn),這樣還沒有完全實(shí)現(xiàn)編輯,因?yàn)槲覀兊臉?biāo)簽還沒有同步過(guò)來(lái),我們看到的標(biāo)簽select都是空的,但是原來(lái)的文章是有標(biāo)簽的啊,這個(gè)怎么辦呢?

getAttribute

getAttribute就可以登場(chǎng)了,借助tag_list[]這個(gè)便利特性,我們可以在Article.php中為其設(shè)置一個(gè)getAttribute方法:

 public function getTagListAttribute()
    {
        // laravel 5.1 needs all()
        return $this->tags->lists("id")->all();
        // tags means tags() many-to-many relationship with tag
    }

這里需要說(shuō)明一下,類似getAttribute都統(tǒng)一使用駝峰法。然后取值的時(shí)候就統(tǒng)一使用下劃線的方法,比如這里的tag_list就是對(duì)應(yīng)TagList,如果你寫成tag_involved,方法就是getTagInvolvedAttribute()。這樣寫laravel會(huì)自動(dòng)獲取這個(gè)值。

注意,laravel 5.0版本,寫成這樣return $this->tags->lists("id");

我們來(lái)看看效果:

OK,這里我們實(shí)現(xiàn)完編輯頁(yè)面之后,我們根據(jù)Form::model()url來(lái)注冊(cè)一個(gè)post路由

注冊(cè)post路由

來(lái)到routes.php中,為update方法增加post路由:

Route::post("article/update","ArticleController@update");

修改文章的表單會(huì)提交到article/update,然后觸發(fā)ArticleControllerupdate()方法。

編寫update()

ArticleController中增加update()方法:

public function update(RequestsStoreArticleRequest $request)
    {
        //這里使用同樣地驗(yàn)證規(guī)則
       dd($request->all());
    }

我們來(lái)看看有沒有拿到提交過(guò)來(lái)的數(shù)據(jù):

OK,我們爭(zhēng)取拿到數(shù)據(jù)了,接下來(lái)就是實(shí)現(xiàn)更新了。修改我們的update()方法:

public function update(RequestsStoreArticleRequest $request)
    {
        //根據(jù)id查詢到需要更新的article
        $article = Article::find($request->get("id"));
        //使用Eloquent的update()方法來(lái)更新,
        //request的except()是排除某個(gè)提交過(guò)來(lái)的數(shù)據(jù),我們這里排除id
        $article->update($request->except("id"));
        // 跟attach()類似,我們這里使用sync()來(lái)同步我們的標(biāo)簽
        $article->tags()->sync($request->get("tag_list"));
        
        return redirect("/");
    }

OK,代碼邏輯實(shí)現(xiàn)完了之后,我們來(lái)看看是否能更新成功:

Bang,大工告成??!

總結(jié)

如果你一直都跟著教程來(lái),這個(gè)修改文章的過(guò)程應(yīng)該思路很清晰。我們?cè)谶@里再一次感受到:

注冊(cè)路由--->控制器寫方法--->加載視圖

這一個(gè)神奇的輪回。這里還是需要強(qiáng)調(diào)的是Form::model()getAttribute這兩個(gè)知識(shí)點(diǎn)。

最后,到這里,貌似我們的整個(gè)教程就可以結(jié)束了。下面我打算再開一個(gè)系列說(shuō)說(shuō)laravel 5.1的新特性.

Happy Hacking

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21121.html

相關(guān)文章

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

    摘要:原文來(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-wor...

    mrcode 評(píng)論0 收藏0
  • Laravel 5系列教程八:queryScope 和 setAttribute

    摘要:注意在文件頭部使用來(lái)引入。比如我們想使用這個(gè)方法,就定義為。總結(jié)又是最后的結(jié)尾了,這里我們簡(jiǎn)單的介紹了和的用法,下一節(jié)打算說(shuō)說(shuō)的一個(gè)重要的內(nèi)容。那個(gè)時(shí)候也就會(huì)越來(lái)越覺得的強(qiáng)大了。 原文來(lái)自 https://laravist.com/article/16 免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-basic Laravist是我剛剛上...

    FreeZinG 評(píng)論0 收藏0
  • Laravel 5系列教程六:表單 Forms

    摘要:不難發(fā)現(xiàn),的還默認(rèn)為我們生成一個(gè)的表單,這個(gè)是默認(rèn)對(duì)表單提交的一點(diǎn)安全支持。在表單提交的時(shí)候,會(huì)自動(dòng)檢查這個(gè)是否與保存在中的一致,如果不一致,那就直接跳轉(zhuǎn)回遠(yuǎn)頁(yè)面,不允許我們提交數(shù)據(jù)。 原文來(lái)自:https://jellybool.com/post/programming-with-laravel-5-laravel-forms-input 免費(fèi)視頻教程地址 https://larav...

    fancyLuo 評(píng)論0 收藏0
  • 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系列教程七:表單驗(yàn)證 Validation

    摘要:幾乎在每一個(gè)應(yīng)用當(dāng)中都會(huì)有表單,而有表單基本就離不開表單驗(yàn)證。在中,其實(shí)可以說(shuō)是有兩種方式來(lái)進(jìn)行表單驗(yàn)證使用和使用。然后,上面的驗(yàn)證規(guī)則是對(duì)于和兩個(gè)字段,我們需要用戶為其填充內(nèi)容,不能為空。 原文來(lái)自:https://laravist.com/article/15 免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-basic Laravis...

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

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

0條評(píng)論

pf_miles

|高級(jí)講師

TA的文章

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