2017-06-20 5 views
0

基本的なインデックス/ show/store/update/destroy呼び出しに応答できる汎用リソースコントローラを実装しようとしています。LaravelのFormRequestsを使用した汎用ResourceController

私はこのコントローラに特定の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

まず、フォームの内側にこれを追加します。これは、ストアメソッドが

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(); 
} 

のように同じことができるかである、隠されたトークン入力第二

{{ csrf_field() }} 

を生成します

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

関連する問題