自定义简码解析器

Custom shortcode parser

我正在尝试为 PHP 中的简码创建一个自定义解析器,但我需要有关使用 php 函数(甚至 php 库)的说明。请注意,我使用的是 Laravel 5,因此也欢迎打包。

例如,我有一个这样格式的字符串:

Hello {{user.first_name}}, your ID is {{user.id}}

我有一个包含这些参数的 $user 对象。我想检查对象中是否存在字符串中的所有短代码参数,如果不存在,我想 return 一个错误,如果是,我想 return 解析等于的字符串:

Hello John, your ID is 123.

更新

请注意,我正在构建一个 REST API,这将用于自动电子邮件系统。我需要控制器中的字符串形式的结果,这样我就可以在 json 响应 returned.

之前在我的邮件功能中使用它

根据您的模板样式 Mustache.php 是实现您目标的正确库。

使用作曲家。将 mustache/mustache 添加到项目的 composer.json:

{
    "require": {
        "mustache/mustache": "~2.5"
    }
}

用法:

if(isset($user->first_name) && isset($user->id)) {
    $m = new Mustache_Engine;
    return $m->render("Hello {{first_name}}, your ID is {{id}}", $user);
    //will return: Hello John, your ID is 123.
}else {
    //trigger error
}

更新 1:

如果您的数据对象是 Eloquent 实例,您可以使用以下 class 在缺少变量的情况下自动抛出错误:

class MustacheData {

  private $model;

  public function __construct($model) {
    $this->model = $model;
  }

  public function __isset($name) {
    if (!isset($this->model->{$name})) {
      throw new InvalidArgumentException("Missing $name");
    }

    return true;
  }

  public function __get($name) {
    return $this->model->{$name};
  }
}

用法:

try {
    $m = new Mustache_Engine;
    return $m->render("Hello {{first_name}}, your ID is {{id}}", new MustacheData($user));
}catch(InvalidArgumentException $e) {
    //Handle the error
}