Laravel 5.1 - 调用未定义的方法Illuminate \ View \ Compilers \ BladeCompiler :: createPlainMatcher()

时间:2015-06-09 14:45:55

标签: laravel laravel-5 blade

尝试将我的项目从L5升级到L5.1,这里不兼容:

  

调用未定义的方法   照亮\视图\编译器\ BladeCompiler :: createPlainMatcher()

这是导致异常的代码:

Blade::extend(function($view, $compiler) {
    $pattern = $compiler->createPlainMatcher('spaceless');
    return preg_replace($pattern, '$1<?php ob_start(); ?>$2', $view);
});

Blade::extend(function($view, $compiler) {
    $pattern = $compiler->createPlainMatcher('endspaceless');
    return preg_replace($pattern, '$1<?php echo trim(preg_replace(\'/>\s+</\', \'><\', ob_get_clean())); ?>$2', $view);
});

我应该更改什么才能使此代码在Laravel 5.1中运行?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我查看了@lukasgeiter评论,这确实有效,我会继续使用它。他指的是向AppServiceProvider添加一个刀片指令调用。

public function boot()
{
    Blade::directive('datetime', function($expression) {
        return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
    });
}

我为Laravel 5.0应用程序创建了一个特定于刀片的服务提供程序,并且有一些我不想重写的自定义函数,所以我添加了createOpenMatcher函数我的自定义BladeServiceProvider。

就我而言,我是这样添加的。

<?php namespace App\Providers;

use Blade;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\Compilers\BladeCompiler;

class BladeServiceProvider extends ServiceProvider {

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        Blade::extend(function($view, $compiler) {
            $pattern = $this->createOpenMatcher('spaceless');
            return preg_replace($pattern, '$1<?php ob_start(); ?>$2', $view);
        });

        Blade::extend(function($view, $compiler) {
            $pattern = $this->createOpenMatcher('endspaceless');
            return preg_replace($pattern, '$1<?php echo trim(preg_replace(\'/>\s+</\', \'><\', ob_get_clean())); ?>$2', $view);
        });
    }

    public function createOpenMatcher($function){
        return '/(?<!\w)(\s*)@'.$function.'\(\s*(.*)\)/';
    }
}

希望这有帮助!