2016-09-22 50 views
1

我在我的控制器中有一些簡單的邏輯。但我經常以其他方法使用它。這是一個例子。Laravel 5如何在我的簡單控制器邏輯中遵循DRY?

在我的控制器中。

public function method1() 
{ 
if(isset(Auth::user()->showroom->name)){ 
      $showroomName = Auth::user()->showroom->name; 
     }else{ 
      $showroomName = "Belum Ada Izin"; 
     } 
     return view('method1view', compact('showroomName')); 
} 

public function method2() 
{ 
if(isset(Auth::user()->showroom->name)){ 
      $showroomName = Auth::user()->showroom->name; 
     }else{ 
      $showroomName = "Belum Ada Izin"; 
     } 
     return view('method2view', compact('showroomName')); 
} 
... so on 

我如何在我的情況下遵循DRY原則?

任何幫助將不勝感激。

在此先感謝。

回答

0

更清潔和更短的語法控制器引用它,使用data_get幫手:

data_get(Auth::user(), 'showroom.name', 'your default value'); 

這在大多數情況下,來得心應手,但並不總是最好的方法。

然而,在你的例子看來,也許其實你想簡單地share this variable across your views - 使用share或文檔中描述的View Composer

+0

任何意見我應該在哪裏放'data_get()'函數?所以我可以在我的控制器中調用像'$ showroomName = dataGetShowroomName()'而不是'$ showroomName = data_get(Auth :: user(),'showroom.name','您的默認值');' –

+0

只要把它放在哪裏你需要它。控制器並不壞,除非它是一個'全局'變量 - 那麼你可以在'app/helpers.php'文件中註冊一個函數(你將添加到作曲者'autoload - > files'數組中) –

0

在你的陳列室模型,你可以包括以下功能:

public function getNameAttribute($value) 
{ 
    return isset($value) ? $value : 'Belum Ada Izin'; 
} 

這是假設你想要的行爲隨處可見showroom->name使用。如果沒有,請功能getNameWithDefaultAttribute,在身體檢查$this->name,並在像Auth::user()->showroom->name_with_default