控制器功能

时间:2016-11-26 06:45:17

标签: php laravel laravel-5.3 laravel-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)

我犯了什么错误,或者如果在控制器中有if语句我们就不能使用刀片?

7 个答案:

答案 0 :(得分:1)

Blade @if的语法是在刀片视图中使用而不是在php文件中使用(如在您的案例控制器中)。您应该将Blade语法用于以扩展名 - filename。 blade.php 结尾的文件,并且在您的控制器中,请使用if语句的普通PHP语法。

请参阅Blade Docs

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

希望这有帮助!

答案 1 :(得分:1)

代码中的错别字,代码是针对刀片文件而不是针对您的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;

最好像{/ 1>一样使用switch case

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

答案 2 :(得分:0)

在控制器中你应该这样写:

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

但是如果你要用PHP构建HTML / CSS / JS,那就太糟糕了,不要这样做。

答案 3 :(得分:0)

请尝试以上情况切换机箱。

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

它将返回完全相同的结果。

答案 4 :(得分:0)

  

您可以在控制器中构建样式,然后将结果数据从该Controller传递到视图,然后再渲染它。这个片段可能会给你一些见解:

{{1}}
  

然后;在视图中,这可能是做这样的事情:

{{1}}

答案 5 :(得分:0)

不,你不能。只需在php中使用默认的if else条件。

答案 6 :(得分:0)

Blade是一个模板解析器,可以在后台将代码转换为PHP。 如果要在控制器中使用if语句,只需使用标准IF语句。

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

如上所述,建议在使用if

的许多else语句时使用switch语句
switch($q){
    case "yes": 
        return $something;
    break;
    case "no":
        return $somethingelse;
        break;
    case "maybe":
        return $whoknows;
        break;
}