2016-08-16 32 views
0

我有我的代碼中重複的某些業務邏輯。是否有一個標準化的方式來分離4.2版本?我知道在新版本中,Command用於這種類型的東西。重複邏輯的例子:何處以及如何提取重複的業務邏輯?

// detach tags 
$card->tags()->detach(); 

foreach (Input::get('tags', []) as $tag) 
{ 
    // existing tag 
    if (is_numeric($tag) && Tag::whereId($tag)->exists()) 
    { 
     $card->tags()->attach($tag); 
    } 

    // new tag 
    else 
    { 
     $new_tag = new Tag(); 
     $new_tag->market()->associate($market); 
     $new_tag->name = $tag; 
     $new_tag->save(); 

     $card->tags()->attach($new_tag->id); 
    } 
} 

我所能做的最簡單的方法,這是創建一個新的類,像TagManager並添加方法這個邏輯,像createTagattachTagToCard等。但是,我不知道是否有已經是這樣做的「預定義」方式。

+1

創建一個'TagManager'通常是解決這個問題的好方法。我會稍微改變它,以便傳遞要創建的標籤而不是從'輸入'中抓取它們。它往往會使它更加可重用。有沒有關於這個你不喜歡的東西? – user3158900

+0

@ user3158900沒有任何反對。我只是不知道是否已經有一些預定義的地方可以在Laravel的新版本中執行此操作。謝謝。 – Shane

回答

1

重複的代碼問題可以通過使用特徵來解決。 有關性狀更多信息,請here

創建一個名爲TagManagerTrait.php文件夾內部應用程序文件/性狀文件

內容

<?php 
namespace App\Traits; 

trait TagManagerTrait { 

public function createTag() 
{ 
    // your create tag logic 
} 


public function updateTag() 
{ 
     //your update tag logic 
} 

}

更新您的composer.json自動加載這個

{ 
    "autoload" : { 
     "classmap" : [ 
      "app/traits" 
     ] 
    } 
} 

在您要使用重複碼

<?php 
use App\Traits\TagManagerTrait; 

class XyzController extends Controller{ 

    use TagManagerTrait; 
} 

現在的控制器將繼承特質的所有功能,並可以自由使用的控制器。