事实上,我对代码清理有疑问 我试图在刀片文件中获得一些价值,我在两种方法之间感到困惑 我认为两者都是正确的,但我需要知道谁的清洁和安全更多的原因
直接使用Eloquent
在我的刀片中进行第一种方法@foreach
(Auth::user()->company->country->cities as $city) {{$city->name}}
@endforeach
使用Injecting Services的第二种方法是在我的模型中创建此方法并使用laravel 5.1 Injecting Services在我的刀片中使用它
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 :(得分:4)
您的第二种方法不起作用,因为该功能将在返回第一个城市(或第一个城市本身)的名称时完成。为了使它工作,你可以重写它,以便它返回所有城市并在刀片中循环它们。
因此,如果您使用该功能,您的代码可能如下所示:
@foreach($serviceName->getCities() as $city)
{{ $city->name }}
@endforeach
这是一件好事,因为视图并不关心城市的来源。如果您在不同的视图上使用此类服务,则更新会更容易。
关于安全性:这两种方法没有区别。只要您使用' {{}}'打印输出。运营商。它可以防止可能的XSS攻击。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
如果您正确设置了雄辩的关系,那么您应该使用以下代码来获取城市
foreach(Auth::user()->cities as $city)
{
{!! $city->whatever !!}
}