2017-06-20 25 views
0

我想實現一個通用的資源控制器,可以響應基本索引/顯示/存儲/更新/銷燬調用。通用ResourceController與Laravel中的FormRequests

我想能夠傳遞一個特定的FormRequest類到這個控制器驗證輸入的存儲和更新調用。然而,我還沒有能夠得到這最後一點工作。

在此先感謝您的幫助!

<?php 
namespace App\Http\Controllers; 

class ResourceController extends Controller 
{ 
    private $model; //Resource this controller configures. 
    private $formRequest; //A FormRequest for validating resource input. 
    private $requestParams; //The possible parameters for resource input. 

    public function __construct(String $modelClass, String $formRequestClass, array $requestParams){ 
     $this->model = $modelClass; 
     $this->formRequest = $formRequestClass; 
     $this->requestParams = $requestParams; 
    } 

    /** 
    * Display a listing of the resource. 
    */ 
    public function index() 
    { 
     return $this->model::all(); 
    } 

    /** 
    * Store a newly created resource in storage. 
    */ 
    public function store() 
    { 
     return $this->model::create(request($this->requestParams)); 
    } 

    /** 
    * Display the specified resource. 
    */ 
    public function show($id) 
    { 
     return $this->findResource($id); 
    } 

    /** 
    * Update the specified resource. 
    */ 
    public function update($id) 
    { 
     $resource = $this->findResource($id); 
     $resource->update(request($this->requestParams)); 
     return $resource; 
    } 


    /** 
    * Remove the specified resource from storage. 
    */ 
    public function destroy($id) 
    { 
     $this->findResource($id)->delete(); 
    } 

    private function findResource($id){ 
     return $this->model::find($id); 
    } 
} 

回答

0

首先,在您的視圖中添加此表單。它會生成一個隱藏的記號輸入

{{ csrf_field() }} 

其次,這是怎樣一個存儲方法可以看看

public function store() 
{ 
    $this->validate(request(), [ 
     'title' => 'required' 
     'body' => 'required' 
    ]); 

    Model::create($request->all()->except('_token')); 

    return redirect()->back();  
} 

或者這樣

public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'title' => 'required' 
     'body' => 'required' 
    ]); 

    Model::create($request->all()->except('_token')); 

    return redirect()->back(); 
} 

同爲更新

public function update(Request $request) 
{ 
    $this->validate($request, [ 
     'title' => 'required' 
     'body' => 'required' 
    ]); 

    Model::create($request->all()->except('_token')); 


    return redirect()->back(); 
} 

在視圖中添加這個

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

我試圖將驗證邏輯抽象爲更具體的類,以維護表單請求的優點並保持關注點分離。 – GroovyP