Posted in Laravel 5 筆記

Laravel 5 – View Partials and Form Reuse

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看目前有哪些設定。
laravel5_formreuse_1

laravel提供RESTful controller,只要一行code,就可針對這些基本動作產生對應的URI跟Controller  method,意思是說,例如,當URI等於articles時,laravel會去執行ArticleController的index方法,但是ArticleController的所有method還是要自行定義跟撰寫。

//routes.php
//articles URI註冊給ArticleController
Route::resource('articles', 'ArticleController');

laravel5_formreuse_2

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可以重複使用。
laravel5_formreuse_3

//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引用。
laravel5_formreuse_4

﹝範例2﹞form的內容另成view,供create跟edit form使用。兩個頁面的Form::open跟Form::close是不能包含在partial的,因為它們的token不一樣,其他input欄位可以成為partial。這要注意,partial可以有變數,當主頁面include時,再由主頁面決定變數值,像是submit顯示值,在create頁面稱作Add Article,在edit頁面為Update Article。
laravel5_formreuse_5

Leave a comment