尝试将我的项目从 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 中运行?
我有同样的问题。我查看了 @lukasgeiter 评论,这确实有效,我将继续使用它。他指的是添加一个 Blade 指令调用AppServiceProvider
.
public function boot()
{
Blade::directive('datetime', function($expression) {
return "<?php echo with{$expression}->format('m/d/Y H:i'); ?>";
});
}
我为我的 Laravel 5.0 应用程序创建了一个特定于刀片的服务提供程序,并且有一些我不想重写的自定义函数,因此我添加了createOpenMatcher https://github.com/laravel/framework/blob/5.0/src/Illuminate/View/Compilers/BladeCompiler.php运行我的自定义 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*(.*)\)/';
}
}
希望这可以帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)