Лезвие, если условие в функции контроллера

Можно ли использовать условия blade @if в функциях контроллера. Это моя функция PublicController

    public function tourBanner($country){

    @if( $country == 'country1')
        background-image:url({{ asset('images/inside8.jpg') }});                        
    @elseif ( $country == 'country2')           
            background-image:url({{ asset('images/inside7.jpg') }});

    @elseif ( $country == 'country3')           
            background-image:url({{ asset('images/inside5.jpg') }});

    @elseif ( $country == 'country4')           
            background-image:url({{ asset('images/inside6.jpg') }});            
    @else           
            background-image:url({{ asset('images/inside10.jpg') }});           
    @endif

    return banner;
}

И я получаю эту ошибку

Parse error: syntax error, unexpected 'if' (T_IF)

Какую ошибку я допустил или мы не можем использовать blade-сервер if if в контроллере?

7 ответов

Синтаксис клинка @if сделано для использования в представлениях лезвия не в файлы php (как в вашем случае контроллеры). Вы должны использовать Blade Syntax в файлах, заканчивающихся расширением - filename.blade.php, и в вашем контроллере, пожалуйста, используйте обычный синтаксис PHP для оператора if.

Пожалуйста, смотрите Blade Docs

class Controller {
   function a() {
      if($country == 'country1') {
          $asset_str = asset('images/inside8.jpg');
          $banner = "background-image:url({$asset_str})";
      }
      ....
      return $banner;
   }
}

Надеюсь это поможет!

Опечатки в вашем коде, этот код предназначен для блейд-файлов, а не для ваших файлов PHP. Перечисление проблем в вашем коде

Удалить @ из вашего кода

@if .... @elsif

должно быть

if .... elseif 

лучше для нескольких if ... else ты можешь использовать switch case

Вы возвращались banner но это должно быть $banner а также вы не назначали никакого значения $banner переменная. Так что ваш код будет как

if( $country == 'country1')
       $banner =  "background-image:url(".asset('images/inside8.jpg') .")";
.......

return $banner;

лучше использовать switch case как

switch($country)
{
     case "country1":
          $banner =  "background-image:url(".asset('images/inside8.jpg') .")";
          break;
     case ..............
}

Вы можете создать стиль в вашем контроллере, а затем передать полученные данные вашему представлению из этого контроллера и затем отобразить его. Этот фрагмент может дать вам немного понимания:

<?php

    public function tourBanner($country){
        $extraData  = ['zero', 'one', 'two'];

        switch($country){
            case 'country1':
                $bgImage    = 'images/inside8.jpg';
                break;
            case 'country2':
                $bgImage    = 'images/inside7.jpg';
                break;
            case 'country3':
                $bgImage    = 'images/inside5.jpg';
                break;
            case 'country4':
                $bgImage    = 'images/inside6.jpg';
                break;
            default:
                $bgImage    = 'images/inside10.jpg';
                break;
        }

        return view("your.blade.view", array(
            "bgImage"    => $bgImage,
            'extraData'  => $extraData,
        ));
    }

Затем; во View это было бы вопросом выполнения чего-то подобного:

    <div class="container" style="background-image:url({{ asset($bgImage) }})">
        <div class="col-md-12">
            Some Content...
        </div>
    </div>

В контроллере вы должны написать так:

if ($country == 'country1') {
    $a = 'background-image:url('.asset('images/inside8.jpg').')';
} elseif ....

Но если вы собираетесь создавать HTML/CSS/JS с PHP, это ужасная идея, не делайте этого.

Blade - это анализатор шаблонов, который за кулисами преобразует код в PHP. Если вы хотите использовать оператор if в вашем контроллере, вы просто используете стандартный оператор IF.

if($q == $a) {
    #more code here
} else {
    $other code here
} 

Как предложено выше, рекомендуется использовать оператор switch при использовании множества операторов else для вашего if

switch($q){
    case "yes": 
        return $something;
    break;
    case "no":
        return $somethingelse;
        break;
    case "maybe":
        return $whoknows;
        break;
}

Пожалуйста, попробуйте переключить чехол для вышеуказанного условия.

switch ($country) {
    case "country1":
        echo "background-image:url({{ asset('images/inside8.jpg') }})";
        break;
}

Он вернет точно такие же результаты.

НЕТ, ты не можешь. просто используйте по умолчанию if else состояние в php.

Другие вопросы по тегам