Intereting Posts

PHP-код внутри шаблона Blade Laravel 5

Я должен поместить некоторый 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?

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

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

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

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

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

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

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

{{- -}} работает как комментарий к лезвию / и / возвращает эффект комментария в результате

 <?php $var = 'test' ?> 

Проблема в том, что она длиннее, чем теги php 🙁

Следующий новый NewBladeCompiler будет использовать @{ }} для принятия всех php-кодов, таких как присвоение переменной, объявление класса и т. Д., Например @{ $variable = 0; }} @{ $variable = 0; }} будет скомпилирован в <?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); } } ?>