摘要:來看看具體的步驟注冊路由在中,注冊我們的編輯頁面的路由這個路由接受一個參數,意為文章的,我們會需要根據這個來查詢我們要修改的文章。然后渲染視圖,并將查詢到的和傳給視圖。下面我打算再開一個系列說說的新特性
免費視頻教程地址 https://laravist.com/series/laravel-5-basic原文來自https://laravist.com/article/20
Laravist是我剛剛上線的Laravel社區,有任何與Laravel相關的問題可以到這里來問我,我會盡力去幫大家解決問題,后期會嘗試錄制一些視頻教程,形式大概是這樣的
https://laravist.com/lesson/2
我們之前的一系列文章綜合起來就實現了一個發布文章的整個流程,但是萬一我們需要修改某篇文章的內容呢?我們該如何去實現呢?其實,有了怎么創建一篇文章之后,我們實現編輯(更新)文章的思路很類似。這里可以值得注意的知識點就是Form::model和getAttribute了。來看看具體的步驟:
注冊路由在routes.php中,注冊我們的編輯頁面的路由:
Route::get("article/edit/{id}","ArticleController@edit");
這個路由接受一個參數:id,意為文章的id,我們會需要根據這個id來查詢我們要修改的文章。
編寫edit方法根據路由,我們在ArticleController添加edit()方法:
public function edit($id) { $article = Article::findOrFail($id); $tags = Tag::lists("name", "id"); return view("articles.edit",compact("article","tags")); }
很熟悉地,我們首先根據id來查詢到我們需要編輯的文章,對于$tags,我們采取跟create()方法一樣的方法,得到我們的$tags列表。然后渲染視圖,并將查詢到的$article和$tags傳給視圖。
創建視圖上面的edit()方法指定了渲染articles.edit(resources/views/articles/edit.blade.php)這個視圖,我們來創建之,這里為了便利,我們可以直接將create.blade.php這個視圖文件拷貝過來:
@extends("app") @section("content")修改文章:{{ $article->title }}
{!! Form::model($article,["url"=>"article/update"]) !!} {!! Form::hidden("id",$article->id) !!}{!! Form::label("title","標題:") !!} {!! Form::text("title",$article->title,["class"=>"form-control"]) !!}{!! Form::label("content","正文:") !!} {!! Form::textarea("content",$article->content,["class"=>"form-control"]) !!}{!! Form::label("published_at","發布日期") !!} {!! Form::input("date","published_at",$article->published_at->format("Y-m-d"),["class"=>"form-control"]) !!}{!! Form::label("tag_list","選擇標簽") !!} {!! 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())
這里我們注意下面這幾點:
我們使用了Form::hidden()
這里我們使用這個目的(因為hidden表單并不會展示給用戶看)就是為了后面在更新的時候更加便捷和暴力,因為有了id,我們一切的事情都很好辦。
我們給Form input表單設置了初始值
通過類似{!! Form::text("title",$article->title,["class"=>"form-control"]) !!}中的$article->title的形式,我們給表單賦予了初始值。
我們使用了Form::model()
在聲明Form的時候,我們并不是簡單的使用Form::open(),Form::model()首先需要將你要綁定的model傳進來,這里我們用的是$article,也就是我們在edit()方法查找到的$article,這個有什么好處呢?
一旦綁定Form::model(),在后面的input表單中即使你沒有設置初始值,laravel也會自動為你匹配,然后
為你賦予初始值,這也是使用Form的好處之一,就比如上面的{!! Form::text("title",$article->title,["class"=>"form-control"]) !!},在Form::model()下,你完全可以像之前那樣寫:
{!! Form::text("title",null,["class"=>"form-control"]) !!}
你依然會得到相同的效果,但是這里為了更清晰,我直接賦了$article->title初始值。
我們又使用Carbon
在文章的published_at這個字段,我們借$article->published_at->format("Y-m-d")又一次感受到了Carbon的便利。
最后來看看我們的編輯頁面有沒有好:
仔細看其實就會發現,這樣還沒有完全實現編輯,因為我們的標簽還沒有同步過來,我們看到的標簽select都是空的,但是原來的文章是有標簽的啊,這個怎么辦呢?
getAttributegetAttribute就可以登場了,借助tag_list[]這個便利特性,我們可以在Article.php中為其設置一個getAttribute方法:
public function getTagListAttribute() { // laravel 5.1 needs all() return $this->tags->lists("id")->all(); // tags means tags() many-to-many relationship with tag }
這里需要說明一下,類似getAttribute都統一使用駝峰法。然后取值的時候就統一使用下劃線的方法,比如這里的tag_list就是對應TagList,如果你寫成tag_involved,方法就是getTagInvolvedAttribute()。這樣寫laravel會自動獲取這個值。
注意,laravel 5.0版本,寫成這樣return $this->tags->lists("id");
我們來看看效果:
OK,這里我們實現完編輯頁面之后,我們根據Form::model()的url來注冊一個post路由
注冊post路由來到routes.php中,為update方法增加post路由:
Route::post("article/update","ArticleController@update");
修改文章的表單會提交到article/update,然后觸發ArticleController的update()方法。
編寫update()在ArticleController中增加update()方法:
public function update(RequestsStoreArticleRequest $request) { //這里使用同樣地驗證規則 dd($request->all()); }
我們來看看有沒有拿到提交過來的數據:
OK,我們爭取拿到數據了,接下來就是實現更新了。修改我們的update()方法:
public function update(RequestsStoreArticleRequest $request) { //根據id查詢到需要更新的article $article = Article::find($request->get("id")); //使用Eloquent的update()方法來更新, //request的except()是排除某個提交過來的數據,我們這里排除id $article->update($request->except("id")); // 跟attach()類似,我們這里使用sync()來同步我們的標簽 $article->tags()->sync($request->get("tag_list")); return redirect("/"); }
OK,代碼邏輯實現完了之后,我們來看看是否能更新成功:
Bang,大工告成!!
總結如果你一直都跟著教程來,這個修改文章的過程應該思路很清晰。我們在這里再一次感受到:
注冊路由--->控制器寫方法--->加載視圖
這一個神奇的輪回。這里還是需要強調的是Form::model()和getAttribute這兩個知識點。
最后,到這里,貌似我們的整個教程就可以結束了。下面我打算再開一個系列說說laravel 5.1的新特性.
Happy Hacking
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21121.html
摘要:原文來自免費視頻教程地址期間受到很多私事影響,終于還是要好好寫寫的教程了。我們來實現這個功能顯示文章詳情通過文章展示來快速體驗上面的流程注冊路由來到中,我們增加一個路由上面的路由指定我們需要加載中的方法。 原文來自: https://jellybool.com/post/programming-with-laravel-5-model-controller-view-basic-wor...
摘要:注意在文件頭部使用來引入。比如我們想使用這個方法,就定義為。總結又是最后的結尾了,這里我們簡單的介紹了和的用法,下一節打算說說的一個重要的內容。那個時候也就會越來越覺得的強大了。 原文來自 https://laravist.com/article/16 免費視頻教程地址 https://laravist.com/series/laravel-5-basic Laravist是我剛剛上...
摘要:不難發現,的還默認為我們生成一個的表單,這個是默認對表單提交的一點安全支持。在表單提交的時候,會自動檢查這個是否與保存在中的一致,如果不一致,那就直接跳轉回遠頁面,不允許我們提交數據。 原文來自:https://jellybool.com/post/programming-with-laravel-5-laravel-forms-input 免費視頻教程地址 https://larav...
摘要:原文發表在我的個人網站系列入門教程一最適合中國人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。在此我推薦一個全量中國鏡像。 原文發表在我的個人網站:Laravel 5 系列入門教程(一)【最適合中國人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大...
摘要:幾乎在每一個應用當中都會有表單,而有表單基本就離不開表單驗證。在中,其實可以說是有兩種方式來進行表單驗證使用和使用。然后,上面的驗證規則是對于和兩個字段,我們需要用戶為其填充內容,不能為空。 原文來自:https://laravist.com/article/15 免費視頻教程地址 https://laravist.com/series/laravel-5-basic Laravis...
閱讀 2442·2019-08-30 15:52
閱讀 2241·2019-08-30 12:51
閱讀 2837·2019-08-29 18:41
閱讀 2823·2019-08-29 17:04
閱讀 817·2019-08-29 15:11
閱讀 1727·2019-08-28 18:02
閱讀 3606·2019-08-26 10:22
閱讀 2514·2019-08-26 10:12