Laravel:重构Controller store()和update()方法

时间:2019-08-10 05:13:59

标签: php laravel eloquent refactoring

我正在开发Laravel Web App,我需要在重构Controller方面有见识。

我注意到我的Controller store()和update()方法非常相似。如此相似,仅更改的行如下: 在store()方法中,我使用$deck = new Deck();;在update()方法中,我使用$deck = Deck::find($id);。在Controller内部的这140行中,这些是唯一更改的行。

如何重构该代码或将其提取到哪里?我的第一个想法是创建一个Trait并将方法放到那里,但这似乎不正确,或者是吗?

3 个答案:

答案 0 :(得分:1)

如果要将应用程序逻辑保留在控制器中,可以对重复的代码创建一个函数,然后在参数中传递Deck对象。

  public function store()
  {
    $deck = new Deck();
    $this->save($deck);
  }

  public function update()
  {
    Deck::find($id);
    $this->save($deck);
  }

  private function save(Deck $deck)
  {
    // Duplicate Code goes here
  }

希望我能帮上忙

答案 1 :(得分:0)

我不建议同时使用两种方法,但是不知道您的用例,可以使用firstOrNew帮助方法,如果给定的ID存在Deck,它将返回Deck::firstOrNew(['id' => $id]); 否则它将为您创建一个新实例。所以用这个:

   <div class="container">
  <h4 class="publish-work" >PUBLISHED WORKS AVAILABLE</h4>
  <br>
    <input type="search" class="search" name="search" >
    <br>
    <br>
    <table id="datalist" class="table table-bordered" style="height: 400px;    overflow-y: auto;">
       <thead>

         <th>S.no</th>
         <th>Name</th>
         <th>Price</th>
       </thead>
       <tbody>
       </tbody>
    </table>

答案 2 :(得分:0)

我的建议是保持简单。我将使用重复的代码创建一个私有函数,然后从store()和update()函数中调用它。