安全和干净的代码5.1

问题描述:

其实我对干净的代码
一个问题,我尝试刀片文件得到一定的价值,我两种方法 我认为都是正确的,但我需要之间的困惑要知道谁是干净,直接使用使用来注入服务通过创建这个方法雄辩安全和干净的代码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

粘贴您的代码,以便我们可以进一步帮助您... –

最好的地方,让您的数据模型是在控制器中,然后将数据传递给视图:

这是任何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 

你的第二种方法将不起作用,因为函数将返回第一个城市(或第一个城市本身)的名称时完成。为了使它工作,你可以重写它,使它返回所有的城市,并在刀片中循环。

所以,如果你使用这个函数的代码可能看起来像:

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

这是一个很好的事情,因为认为不必在意其中城市将从何而来。如果你在不同的视图上使用这样的服务,更新会更容易。

关于安全性:这两种方法没有区别。只要您使用“{{}}”运算符打印输出即可。这将防止可能的XSS攻击。

如果你有安装口才关系正确,那么你应该使用下面的代码

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

我认为最好的办法达到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