尝试将我的项目从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中运行?
答案 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*(.*)\)/';
}
}
希望这有帮助!