是否可以使用 {{ .. }} 和 {!! .. !!} 在 Laravel

Is It Possible to Partially Escape the output string using {{ .. }} and {!! .. !!} in Laravel

我正在使用 Laravel 5.7。 Route 在未转义的 {!! .. !!} 中不起作用。查看呈现为 %7B%7Burl(href='{{url('/')}}' 部分。在我的 Controller 中,我有以下代码:

控制器

$navbar = '';
foreach($navs as $nav){
  $navbar .= "
   <li class='nav-item'>
    <a class='nav-link' href='{{url('/')}}'>".$nav->name."</a>
   </li>
  ";
}
return view('front/index', ['navbar' => $navbar]);

在我的 blade 文件中,我有以下代码:

Blade

<ul>
  {!! $navbar !!}
</ul>

除了 {{url('/')}} 部分,其他都很好。在我的 Blade 文件中,{{url('/')}} 呈现为类似 %7B%7B(url 的内容。我明白为什么会这样。但我的问题是,有没有办法让 {{url('/')}} 工作。

看起来你混合了 PHP 和 Blade。试试这个:

$navbar = '';
foreach($navs as $nav){
  $navbar .= "<li class='nav-item'>";
  $navbar .= "<a class='nav-link' href=' ".url('/')." '>".$nav->name."</a>";
  $navbar .= "</li>";  
}
return view('front/index', ['navbar' => $navbar]);

甚至为了防止引号相关的错误:

$navbar = '';
$url = url('/');
foreach($navs as $nav){
  $navbar .= "<li class='nav-item'>";
  $navbar .= "<a class='nav-link' href=' ".$url." '>".$nav->name."</a>";
  $navbar .= "</li>";  
}
return view('front/index', ['navbar' => $navbar]);

当然,这个答案旨在解决您的具体问题。我建议也看看其他答案。

我认为让 blade 处理所有 html 渲染是最好的主意,将 $navbar 移动到您的 blade,如下所示:

您的控制器:

return view('front/index', ['navs' => $navs]);

您的 blade 文件:

<ul>
    @foreach($navs as $nav)
        <li class="nav-item">
            <a class="nav-link" href="{{ url('/') }}">{{ $nav->name }}</a>
        </li>
    @endforeach
</ul>

在 Laravel 中,我们不在控制器上执行前端逻辑,这是初学者通常会犯的常见错误,请确保所有与前端相关的内容都保留在 blade 文件或 "VIEW"

我建议的是这个..

控制器文件(controller file)

return view('front.index', ['navbar' => $navs]);

front.index 文件(查看文件)

<ul>
 @for($navbar as $nav)
   <li class='nav-item'>
     <a class='nav-link' href='{{ url('/') }}'>{{ $nav->name }}</a>
   </li>
 @endfor
</ul>