自定义简码解析器
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
}
我正在尝试为 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
}