Возможно ли частично экранировать выходную строку, используя {{..}} и {!! .. !!} в Laravel - PullRequest
0 голосов
/ 31 марта 2020

Я использую Laravel 5.7. Route не работает внутри без экранирования {!! .. !!}. Посмотрите на часть href='{{url('/')}}', которая отображается как %7B%7Burl(. В моем Controller у меня есть следующий код:

Conroller

$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('/')}} работать.

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

В Laravel мы не делаем логику внешнего интерфейса c на контроллере, что является типичной ошибкой, которую обычно делают новички. Убедитесь, что все вещи, связанные с внешним интерфейсом, остаются в файлах блейдов или "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>
1 голос
/ 31 марта 2020

Я думаю, что это лучшая идея, чтобы позволить лезвию обрабатывать все 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>
0 голосов
/ 31 марта 2020

Похоже, вы смешиваете 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]);

Конечно, этот ответ нацелен на решение вашей конкретной проблемы c. Я рекомендую взглянуть и на другие ответы.

...