【问题标题】:Laravel 5.1 - Call to undefined method Illuminate\View\Compilers\BladeCompiler::createPlainMatcher()Laravel 5.1 - 调用未定义的方法 Illuminate\View\Compilers\BladeCompiler::createPlainMatcher()
【发布时间】:2015-08-24 11:18:16
【问题描述】:

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

调用未定义的方法 Illuminate\View\Compilers\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 中工作?

【问题讨论】:

标签: laravel laravel-5 blade


【解决方案1】:

我遇到了同样的问题。我查看了@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*(.*)\)/';
    }
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 2015-12-17
    • 1970-01-01
    • 2018-10-03
    • 2015-11-15
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多