我想将以下代码添加到我的 laravel 项目中,以支持刀片中的 break 和 continue 语句。
这是代码:
Blade::extend(function($value)
{
return preg_replace('/(\s*)@(break|continue)(\s*)/', '$1<?php $2; ?>$3', $value);
});
我不知道在哪里放置它,任何帮助将不胜感激?
1) 创建app/Providers/BladeServiceProvider.php
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class BladeServiceProvider extends ServiceProvider
{
public function boot()
{
/* @datetime($var) */
\Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createOpenMatcher('datetime');
return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\')); ?>', $view);
});
/* @eval($var++) */
\Blade::extend(function($view)
{
return preg_replace('/\@eval\((.+)\)/', '<?php ${1}; ?>', $view);
});
}
public function register()
{
//
}
}
2)在config/app.php
添加
<?php
return [
// ...
'providers' => [
// ...
'App\Providers\BladeServiceProvider',
3) 运行php artisan clear-compiled
4)在您的模板中使用@datetime($updated_at)
或@eval($var = 1)
,@eval($var++)
例如
5) 重要说明
blade
模板被缓存,尝试在刀片中进行虚拟更改,这样 laravel 将重新编译模板 – sbedulin 2 月 9 日 17:43
a)运行php artisan clear-compiled
可能会有所帮助
b)我更改了代码
$pattern = $compiler->createOpenMatcher('datetime');
和
return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\')); ?>', $view);
因为Laravel 5 文档中的示例不起作用。
该示例现已更正。
该示例已删除。
没有要求告诉你应该把代码放在哪里,你甚至可以把它放在你的routes.php
(当然这有点乱)。你只需要确保它在 laravel 处理页面视图时被加载。
在这种情况下,在某处创建一个新文件blade_extensions.php
并将其包含在内start/global.php
可能是一个很好的解决方案。
PS:一定要清除你编译的视图,因为 Blade 只有在检测到变化时才会重新编译视图,所以如果你只是在这段代码中插入,在你清除视图之前它不会工作。
Laravel 5 更新:
1)您可能希望在与文件夹Extensions\BladeExtensions.php
相同的级别上创建文件夹\Models, Providers, Services
文件
2)BladeExtensions.php
<?php namespace App\Extensions;
class BladeExtensions {
public static function register()
{
\Blade::extend(function($view, $compiler)
{
$pattern = $compiler->createMatcher('datetime');
return preg_replace($pattern, '$1<?php echo $2->format(\'m/d/Y H:i\'); ?>', $view);
});
}
}
3)AppServiceProvider.php
// ...
use App\Extensions\BladeExtensions;
class AppServiceProvider extends ServiceProvider
{
// ...
public function register()
{
// ...
BladeExtensions::register();
}
}