2015-11-01 73 views
4

其實我對乾淨的代碼
一個問題,我嘗試刀片文件得到一定的價值,我兩種方法 我認爲都是正確的,但我需要之間的困惑要知道誰是乾淨,直接使用使用來注入服務通過創建這個方法雄辯安全和乾淨的代碼5.1

@foreach 
    (Auth::user()->company->country->cities as $city) {{$city->name}} 
@endforeach 

第二條本辦法的原因

第一種方法在我的刀片更安全我的模型,並使用它在我的刀片使用Laravel 5.1注入服務

public function getCity() 
{ 
    foreach(Auth::user()->company->country->cities as $city) { 
     return $city->name ; 
     // OR 
     return $city ; 
      // i think this is one of benefits to use this approach 
      // because in my view i can use getCity()->id or getCity()->name 
    } 
} 

謝謝你的時間。

+0

粘貼您的代碼,以便我們可以進一步幫助您... –

回答

1

最好的地方,讓您的數據模型是在控制器中,然後將數據傳遞給視圖:

這是任何MVC架構帶來分離的關注的關鍵點:您的控制器的目的是從模型中獲取數據並將其傳遞給視圖。該視圖的目的是從控制器獲取數據並呈現它。因此,視圖需要的唯一東西是從控制器傳遞的變量

這樣,應用程序邏輯保存在控制器中,您可以輕鬆地維護您的應用程序。所以:

在你的控制器:

public function index() 
{ 
    //get data from model 
    $cities = Auth::user()->company->country->cities; 

    //pass the data to the view 
    return View::make('your_view', ['cities' => $cities]); 
} 

然後,在你的看法:

@foreach ($cities as $city) 
    {{$city->name}} 
@endforeach 
4

你的第二種方法將不起作用,因爲函數將返回第一個城市(或第一個城市本身)的名稱時完成。爲了使它工作,你可以重寫它,使它返回所有的城市,並在刀片中循環。

所以,如果你使用這個函數的代碼可能看起來像:

@foreach($serviceName->getCities() as $city) 
    {{ $city->name }} 
@endforeach 

這是一個很好的事情,因爲認爲不必在意其中城市將從何而來。如果你在不同的視圖上使用這樣的服務,更新會更容易。

關於安全性:這兩種方法沒有區別。只要您使用「{{}}」運算符打印輸出即可。這將防止可能的XSS攻擊。

0

如果你有安裝口才關係正確,那麼你應該使用下面的代碼

獲得城市
foreach(Auth::user()->cities as $city) 
{ 
    {!! $city->whatever !!} 
} 
2

我認爲最好的辦法達到MVC無論您的代碼設計模式

public function getCities() 
{ 
//in your model model 
    return $cities = Auth::user()->company->country->cities; 
} 

public function index() 
{ 
    //call return getCities(); 
} 

//finally in your view loop over $cities 
    @foreach ($cities as $city) 
    {{$city->name}} 
    @endforeach