| 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;
 
-     }
 
- }
 
 
  |