| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | <?php/** * Created by PhpStorm. * User:  NODELOG * Date: 16/6/22 * Time: 下午4:53 */namespace common\components\notify;use yii\base\BaseObject;use yii\helpers\StringHelper;class Parser extends BaseObject{    /**     * Regex to get values between curly bracket {$value}.     */    const RULE = '/\{(.+?)(?:\{(.+)\})?\}/';    public function parse($item)    {        $body = $item['text'];        $specialValues = $this->getValues($body);        if (count($specialValues) > 0) {            $specialValues = array_filter($specialValues, function ($value) {                return StringHelper::startsWith($value, 'extra.') || StringHelper::startsWith($value, 'to.') || StringHelper::startsWith($value, 'from.');            });            foreach ($specialValues as $replacer) {                $replace = array_get($item, $replacer);                $body = $this->replaceBody($body, $replace, $replacer);            }        }        return $body;    }    /**     * Get the values between {}     * and return an array of it.     *     * @param $body     * @return mixed     */    protected function getValues($body)    {        $values = [];        preg_match_all(self::RULE, $body, $values);        return $values[1];    }    /**     * Replace body of the category.     *     * @param $body     * @param $replacer     * @param $valueMatch     * @return mixed     */    protected function replaceBody($body, $valueMatch, $replacer)    {        $body = str_replace('{'.$replacer.'}', $valueMatch, $body);        return $body;    }}
 |