https://laracasts.com/series/laravel-5-fundamentals/episodes/13
RESTful Resource Controllers:http://laravel.com/docs/5.0/controllers#restful-resource-controllers
前面的範例都是自行在routes.php定義URI,設定對應的新增、儲存、瀏覽文章等。利用route:list看目前有哪些設定。
laravel提供RESTful controller,只要一行code,就可針對這些基本動作產生對應的URI跟Controller method,意思是說,例如,當URI等於articles時,laravel會去執行ArticleController的index方法,但是ArticleController的所有method還是要自行定義跟撰寫。
//routes.php //articles URI註冊給ArticleController Route::resource('articles', 'ArticleController');
Update Form: 更新其中一篇文章。從上圖可知當Method=GET,且URI=articles/{articles}/edit,執行edit方法(顯示該文章預備修改)、當Method=PATCH,且URI=articles/{article},執行update方法(更新該文章)。
step 1: 顯示該文章預備修改
//ArticleController.php public function edit($id) { $article = Article::FindOrFail($id); //讀取該文章 return view('articles.edit', compact($article)); //顯示form }
edit.blade.php有兩個重點,第一、form如何處理?,第二、form可以重複使用。
//edit.blade.php @extends('app') @section('content') <h1>Edit: {{ $article->title}}</h1> //根據resource, Form::open如下 {! Form::open(['method'=>'PATCH', 'action'=>['ArticleController@update',$article->id]]) !} //...以下同create.blade.php @stop
根據resource,form必須是,method=PATCH、action URI=articles/{article},laravel才會執行update方法。上述Form::open必須改成下方的code,laravel才會把table的資料帶到每一個input顯示,好神奇,會自己對應欄位。
{! Form::model($article, ['method'=>'PATCH', 'action'=>['ArticleController@update',$article->id]]) !}
[補充] url: http://laravel.com/docs/5.0/helpers#urls
$url = action(‘HomeController@getIndex’, $params);
$url = route(‘routeName’, $params);
url(‘foo/bar’, $parameters = [], $secure = null);
step 2: 執行update方法。
//ArticleController.php public function update($id, Request $request) { //$request接收從form輸入的新值 $article = Article::FindOrFail($id); //物件(先從DB讀取這一筆資料) $article->update($request->all()); //把新值給該物件做更新 return redirect('articles'); }
Reuse form: 有些內容在多個view會使用到,可以另成一個view,其他主頁要使用再include,稱作partials。要注意@include的基礎資料夾是views,也就是僅能include view檔案。
﹝範例1﹞error提醒訊息另成view,create跟edit頁面使用@include引用。
﹝範例2﹞form的內容另成view,供create跟edit form使用。兩個頁面的Form::open跟Form::close是不能包含在partial的,因為它們的token不一樣,其他input欄位可以成為partial。這要注意,partial可以有變數,當主頁面include時,再由主頁面決定變數值,像是submit顯示值,在create頁面稱作Add Article,在edit頁面為Update Article。