Laravel 5如何在我的简单控制器逻辑中遵循DRY?

问题描述:

我在我的控制器中有一些简单的逻辑。但我经常以其他方法使用它。这是一个例子。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原则?

任何帮助将不胜感激。

在此先感谢。

更清洁和更短的语法控制器引用它,使用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'数组中) –

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

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

这是假设你想要的行为随处可见showroom->name使用。如果没有,请功能getNameWithDefaultAttribute,在身体检查$this->name,并在像Auth::user()->showroom->name_with_default