raoul2000\workflow\validation\WorkflowScenario::match PHP Метод

match() публичный статический Метод

Test if 2 scenario match.
public static match ( string $scenario1, string $scenario2 ) : boolean
$scenario1 string scenario name
$scenario2 string scenario name
Результат boolean TRUE if both scenario names match, FALSE otherwise
    public static function match($scenario1, $scenario2)
    {
        $match1 = $match2 = [];
        if (preg_match_all('/([^\\}{]*)\\{([^\\{\\}]+)\\}/', $scenario1, $match1, PREG_SET_ORDER) && preg_match_all('/([^\\}{]*)\\{([^\\{\\}]+)\\}/', $scenario2, $match2, PREG_SET_ORDER)) {
            if (count($match1) != count($match2)) {
                return false;
            }
            for ($i = 0; $i < count($match1); $i++) {
                if (str_replace(' ', '', $match1[$i][1]) != str_replace(' ', '', $match2[$i][1])) {
                    return false;
                }
                if ($match1[$i][2] != $match2[$i][2] && $match1[$i][2] != '*' && $match2[$i][2] != '*') {
                    return false;
                }
            }
        } else {
            return false;
        }
        return true;
    }

Usage Example

 /**
  * Checks if a validator is active for the workflow event passed as argument.
  *
  * @param yii\validators\Validator $validator The validator instance to test
  * @param WorklflowEvent $event The workflow event for which the validator is tested
  * @return boolean
  */
 private function _isActiveValidator($validator, $currentScenario)
 {
     foreach ($validator->on as $scenario) {
         if (WorkflowScenario::match($scenario, $currentScenario)) {
             return true;
         }
     }
     return false;
 }