2015-06-27 5 views
12

Мне нужно разместить код PHP внутри шаблона Blade Blade. Как нижеPHP-код внутри шаблона Laravel 5 Blade

@foreach ($farmer->tasks as $task) 
    @if ($task->pivot->due_at) < date(now)) 
     $style = 'alert alert-danger'; 
    @elseif ($task->pivot->due_at) > date(now)) 
     $style = 'alert alert-success'; 
    @else 
     $style = ''; 
    @endif 
@endforeach 

Какова процедура размещения PHP-кода внутри шаблона Blade Laravel 5?

ответ

8

Просто открывать и закрывать теги PHP: <?php $style = '...'; ?>

0

Следующая новая NewBladeCompiler будет использовать @{ }} для приема всех кодов PHP как переменная присвоения, объявления класса и т.д. например @{ $variable = 0; }} будет скомпилирован в <?php $variable=0; ?>

<?php 

use Illuminate\View\Compilers\BladeCompiler; 

class NewBladeCompiler extends BladeCompiler 
{ 

    /** 
    * Get the echo methods in the proper order for compilation. 
    * 
    * @return array 
    */ 
    function getEchoMethods() 
    { 
     $methods = [ 
      'compileRawEchos'  => strlen(stripcslashes($this->rawTags[0])), 
      'compileEscapedEchos' => strlen(stripcslashes($this->escapedTags[0])), 
      'compileRegularEchos' => strlen(stripcslashes($this->contentTags[0])), 
      'compilePhpEchos'  => strlen(stripcslashes("@{")) 
     ]; 

     uksort($methods, function ($method1, $method2) use ($methods) { 
      // Ensure the longest tags are processed first 
      if($methods[$method1] > $methods[$method2]) 
      { 
       return -1; 
      } 
      if($methods[$method1] < $methods[$method2]) 
      { 
       return 1; 
      } 
      // Otherwise give preference to raw tags (assuming they've overridden) 
      if($method1 === 'compilePhpEchos') 
      { 
       return -1; 
      } 
      if($method2 === 'compilePhpEchos') 
      { 
       return 1; 
      } 
      if($method1 === 'compileRawEchos') 
      { 
       return -1; 
      } 
      if($method2 === 'compileRawEchos') 
      { 
       return 1; 
      } 
      if($method1 === 'compileEscapedEchos') 
      { 
       return -1; 
      } 
      if($method2 === 'compileEscapedEchos') 
      { 
       return 1; 
      } 
     }); 

     return $methods; 
    } 

    function compilePhpEchos($value) 
    { 
     $pattern = sprintf('/(@)?%s\s*(.+?)\s*%s(\r?\n)?/s', "@{", "}}"); 
     $callback = function ($matches) { 
      $whitespace = empty($matches[3]) ? '' : $matches[3] . $matches[3]; 
      return $matches[1] ? substr($matches[0], 1) : '<?php ' . $matches[2] . ' ?>' . $whitespace; 
     }; 
     return preg_replace_callback($pattern, $callback, $value); 
    } 

} 

?> 
2

Laravel рецепты предлагают простой, но эффективный способ сделать это, не включая PHP-теги

{{--*/ $var = 'test' /*--}} 

{{- -}} работает как лопастной комментарий /и/ возвращается эффект комментария полученный на

<?php $var = 'test' ?> 

проблема состоит в том, что больше, чем в том числе PHP теги :-(

24

Согласно documentation, в Laravel 5.2 и новее вы можете использовать следующий код:

@php 
{{-- php code here --}} 
@endphp 

В качестве альтернативы, вы можете продлить лезвие шаблонизатор, как это описано here.

Если ни одно из вышеуказанных решений не подходит, вы застряли в ответах от @Armen и @Gonzalo

Смежные вопросы