摘要:來(lái)看看具體的步驟注冊(cè)路由在中,注冊(cè)我們的編輯頁(yè)面的路由這個(gè)路由接受一個(gè)參數(shù),意為文章的,我們會(huì)需要根據(jù)這個(gè)來(lái)查詢我們要修改的文章。然后渲染視圖,并將查詢到的和傳給視圖。下面我打算再開一個(gè)系列說(shuō)說(shuō)的新特性
免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-basic原文來(lái)自https://laravist.com/article/20
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::model和getAttribute了。來(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())
這里我們注意下面這幾點(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è)怎么辦呢?
getAttributegetAttribute就可以登場(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ā)ArticleController的update()方法。
編寫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
摘要:原文來(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...
摘要:注意在文件頭部使用來(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是我剛剛上...
摘要:不難發(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...
摘要:原文發(fā)表在我的個(gè)人網(wǎng)站系列入門教程一最適合中國(guó)人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。在此我推薦一個(gè)全量中國(guó)鏡像。 原文發(fā)表在我的個(gè)人網(wǎng)站:Laravel 5 系列入門教程(一)【最適合中國(guó)人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大...
摘要:幾乎在每一個(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...
閱讀 2475·2019-08-30 15:52
閱讀 2265·2019-08-30 12:51
閱讀 2866·2019-08-29 18:41
閱讀 2849·2019-08-29 17:04
閱讀 844·2019-08-29 15:11
閱讀 1777·2019-08-28 18:02
閱讀 3632·2019-08-26 10:22
閱讀 2537·2019-08-26 10:12