安全和干净的代码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
}
}
谢谢你的时间。
答
最好的地方,让您的数据模型是在控制器中,然后将数据传递给视图:
这是任何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
粘贴您的代码,以便我们可以进一步帮助您... –