PHP code inside a Laravel 5 blade template

前端 未结 5 1083
名媛妹妹
名媛妹妹 2020-12-16 09:10

I have to place some PHP code inside a Laravel 5 blade template. Like below

@foreach ($farmer->tasks as $task)
    @if ($task->pivot->due_at) < da         


        
相关标签:
5条回答
  • 2020-12-16 09:47

    According to documentation, in Laravel 5.2 and newer you can use the following code:

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

    Alternatively, you can extend the Blade templating engine as it's described here.

    If neither of the above solutions is suitable, you are stuck with the answers given by Armen and by Gonzalo.

    0 讨论(0)
  • 2020-12-16 09:49

    In modern Laravel (6/7) you should do this:

    @php
       yourphpcode();
    @endphp
    
    0 讨论(0)
  • 2020-12-16 09:50

    Laravel recipes suggest a simple, but effective, way to do it without including the PHP tags:

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

    {{-- --}} works as a blade comment / and / reverts the effect of comment resulting on

    <?php $var = 'test' ?>
    

    The problem is that is longer than including PHP tags :-(

    0 讨论(0)
  • 2020-12-16 09:55

    The following new NewBladeCompiler will use @{ }} for accepting all PHP code like variable assigning, class declaration, etc.

    E.g. @{ $variable = 0; }} will be compiled to <?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);
            }
    
        }
    
    ?>
    
    0 讨论(0)
  • 2020-12-16 10:06

    Just open and close PHP tags:

    <?php $style = '...'; ?>
    
    0 讨论(0)
提交回复
热议问题