2017-07-08 8 views
1

私のコントローラには、保存して更新するメソッドがあります。一度それらのすべてをコピーする方法があり、クラス属性内のすべてのリクエスト属性をコピーします

class TourController extends Controller 
{ 
    public function store(Request $request, Tour $tour) 
     { 
      $tour->name = $request->name; 
      $tour->flight = $request->flight; 
      $tour->price = $request->price; 
      $tour->description = $request->description; 
      $tour->save(); 
      return redirect('home/tour/see'); 
     } 
    public function update(Request $request) 
     { 
      $tour = Tour::find($request->id); 
      $tour->name = $request->name; 
      $tour->flight = $request->flight; 
      $tour->price = $request->price; 
      $tour->description = $request->description; 
      $tour->save(); 
      return redirect('home/tour/see'); 
     } 
} 

それはそうですが、私は自分のコードを繰り返していて、私の質問は:あなたが見ての通り、私は$tour$request属性をコピーしていますが一つ一つの属性?ツアー属性のすべてのリクエスト属性をコピーするにはどうすればよいですか?

答えて

0

はいあなたは同時に

をすべての入力を取得するために$tour = request()->all();を行うことができますか、このようになめらかに行うことができます:

$tour = new Tour; 

$tour= save(request()->all()); 
+0

は、ツアー配列を私の編集した答えこれは$を作る –

+0

をチェック@AliSeyfi多くのため

Tour::create($request->all()); 

、あなたは上のセーブ$ツアー - >()を呼び出しカントそれは –

+0

@AliSeyfi checagain –

0

リクエストからすべての属性を取得し、これらを設定するクラスを作成します。プロパティ。お使いのコントローラで次に

class TourHydrator 

public function updateFromRequest(Request $request, Tour $tour) 
{ 
    $tour->name = $request->name; 
    $tour->flight = $request->flight; 
    $tour->price = $request->price; 
    $tour->description = $request->description; 
} 

injectそれは

class TourController extends Controller 
{ 

    /** 
    * @var TourHydrator 
    */ 
    private $tourHydrator; 

    public function __construct(TourHydrator $tourHydrator) 
    { 
     $this->tourHydrator = $tourHydrator; 
    } 

    public function store(Request $request, Tour $tour) 
    { 
     $this->tourHydrator->updateFromRequest($request, $tour); 
     $tour->save(); 
     return redirect('home/tour/see'); 
    } 

    public function update(Request $request) 
    { 
     $tour = Tour::find($request->id); 
     $this->tourHydrator->updateFromRequest($request, $tour); 
     $tour->save(); 
     return redirect('home/tour/see'); 
    } 
} 

要求は、アプリケーションが進化として変更される場合がありますので、私はむしろ$request->all()を使用するよりも、このアプローチをお勧めします。

また、例えばvalidation追加することができますし、あなたのコントローラで、あなたはそれらを扱うことができます。

try { 
    $this->tourHydrator->updateFromRequest($request, $tour); 
    $tour->save(); 
    return redirect('home/tour/see'); 
} catch (SomeException $e) { 
    return redirect('home/tour/invalid'); 
} 

私も時々マジックメソッドは注意が必要ですので、それが来る場合は特に、あなたのTourモデルでgettestとセッターを使用することをお勧めしますテストする。その後、適切なセッターを使用するようにTourHydratorを変更することができます。

関連する問題