php - Laravel 扩展 Blade 并将数组作为参数传递

标签 php laravel-4 laravel-blade

我搜索了很多关于这个主题的东西,但在网上找不到太多,所以我开始研究并写一篇关于这个主题的完整文章,但我无法理解这里的一些东西,在 blade 中制作基本的自定义标签是简单喜欢

@search @endsearch or @title('something')

但是如果我想做类似下面的事情怎么办

@cache('sidebar',10,[$silver,$gold,$platinum])
  html tags come here
@endcache

目前我是这样做的

@cache('sidebar_',10,function() use ($silver_sidebar,$gold_sidebar))

@endcache

$pattern = Blade::createOpenMatcher('cache');
$replace = "<?php echo PageCache::cache$2 { ?>";
$view = preg_replace($pattern, $replace, $view);

// Replace closing tag
$view = str_replace('@endcache', '<?php }); ?>', $view);

如何解析它来分离三个参数并获取结束和开始标记之间的内容?感谢您的帮助。感谢您的回复。

最佳答案

这个问题现在已有 1 年多了,但如果将来有人需要,我会分享一个解决方案。

使用第一个例子:

@cache('sidebar', 10, [ $silver, $gold, $platinum ])
    html tags come here
@endcache

可以这样做:

Blade::extend(function ($view) {
  $pattern = Blade::createOpenMatcher('cache');
  $pattern = rtrim($pattern, '/') . '(.*?)@endcache/s';

  $matches = [];
  preg_match($pattern, $view, $matches);
  $content = '';

  if (count($matches) > 3) {
    $content = addslashes($matches[3]);
  }

  $replace = "<?php echo PageCache::cache$2, '{$content}'); ?>";
  $view = preg_replace($pattern, $replace, $view);

  return $view;
});

解释代码:

  1. 我们扩展模式以匹配@cache@endcache 之间的内容。请注意表达式中 s 修饰符 的使用。这样我们就可以用 . (点).
  2. 匹配多行
  3. 使用 count($matches) 检查表达式是否匹配某些内容并将其分配给 $content
  4. 最后,我们用函数调用替换 Blade 标签。由于我们的模式已经匹配开始和结束标签以及它们之间的所有内容,因此我们无需担心替换结束标签或其他内容。

这样你就可以在你的函数中获取标签(@cache@endcache)之间的内容:

class PageCache {
  public static function cache($name, $num, $args, $content) {
    return stripslashes($content);
  }
}

基于上面的示例,您将拥有:

$name = 'sidebar';
$num = 10;
$args = [ $silver, $gold, $platinum ];

在我的示例中,我也只是简单地返回内容,但您可以在那里做一些更有趣的事情。

关于php - Laravel 扩展 Blade 并将数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24629148/

相关文章:

php - 使用 PHP 算出最忙的一天

php - mysql_query 不返回密码

laravel - 使用迁移删除带有外键的表

laravel - 为 Vue 使用 2 个不同的 Blade 根模板,以及 Laravel 8 和 Inertia?

Laravel Blade View 未显示对其所做的更改

jquery - 使用 jquery 更改背景图像 css 从 foreachloop 中找到唯一的 src

php - Openfire 不存储离线消息

php - 我需要搜索多变量并排序

php - 重定向更改 Laravel 4 中 Auth::check() 的状态

javascript - 激活 Controller 呈现的模板中的 Vue