laravel 5.1中的安全和清洁代码

时间:2015-11-01 08:56:18

标签: php laravel laravel-5 eloquent laravel-5.1

事实上,我对代码清理有疑问 我试图在刀片文件中获得一些价值,我在两种方法之间感到困惑 我认为两者都是正确的,但我需要知道谁的清洁和安全更多的原因

直接使用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
    }
}

感谢您的时间。

4 个答案:

答案 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 !!}
}