【问题标题】:Is It Possible to Partially Escape the output string using {{ .. }} and {!! .. !!} in Laravel是否可以使用 {{ .. }} 和 {!! 部分转义输出字符串? .. !!} 在 Laravel 中
【发布时间】:2020-04-01 01:50:19
【问题描述】:

我正在使用 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 文件中,我有以下代码:

刀片

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

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

【问题讨论】:

  • 您不能在这样的另一个刀片指令中使用刀片指令。事实上,我认为没有办法像那样在导航栏中获取刀片指令。您可能想单独创建一个导航刀片。

标签: php laravel escaping laravel-blade laravel-5.7


【解决方案1】:

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

我的建议是这样..

控制器文件(控制器文件)

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>

【讨论】:

  • 这是一个很好的重要提示。谢谢。
【解决方案2】:

我认为最好让刀片处理所有 html 渲染,像这样将$navbar 移动到刀片:

你的控制器:

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

您的刀片文件:

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

【讨论】:

  • 非常感谢您的宝贵时间。
【解决方案3】:

看起来你混合了 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]);

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

【讨论】:

  • 我认为可以通过指定不推荐此修复来改进此评论。这可能是一个可行的修复,但使用这种方法可能会在未来的项目中造成更多的混乱,并且不会帮助他们编写更好的代码。
  • @GroverReyes,我明白你的意思。但就我而言,我正在开发一个几乎七级深(嵌套)的动态导航栏。所以为了简单起见,我只是把必要的代码放在这里。实际情况要复杂得多。我知道这不是标准,也不推荐。
猜你喜欢
  • 2020-07-21
  • 2014-10-28
  • 2021-07-29
  • 2012-10-28
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多