安全清洁的代码在 Laravel 5.1 中

4
事实上,我有一个关于代码清洁的问题。 我试图在 blade 文件 中获取一些值,我对两种方法感到困惑。 我认为两种方法都是正确的,但我需要知道哪个 更干净和安全,以及原因
第一种方法是直接在我的 blade 文件中使用 Eloquent。
@foreach
    (Auth::user()->company->country->cities as $city) {{$city->name}}
@endforeach

使用注入服务的第二种方法是在我的模型中创建此方法,并在我的Blade中使用它,使用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
    }
}

感谢您的时间。

请将您的代码粘贴在此处,以便我们能够为您提供进一步的帮助。 - Basheer Kharoti
4个回答

4
你的第二种方法行不通,因为函数在返回第一个城市的名称(或第一个城市本身)时就会结束。要使其正常工作,你可以重写它,使其返回所有城市,并在 blade 中循环遍历它们。
因此,如果你使用该函数,你的代码可能如下所示:
@foreach($serviceName->getCities() as $city)
    {{ $city->name }}
@endforeach

这是一件好事,因为视图不必关心城市将来自哪里。如果在不同的视图中使用这样的服务,更新将更加容易。

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


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

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

0
如果您已经正确设置了Eloquent关系,则可以使用以下代码获取城市:
foreach(Auth::user()->cities as $city)
{
   {!! $city->whatever !!}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接