* @since 2.0 */ abstract class CompositeUrlRule extends Object implements UrlRuleInterface { /** * @var UrlRuleInterface[] the URL rules contained in this composite rule. * This property is set in [[init()]] by the return value of [[createRules()]]. */ protected $rules = []; /** * Creates the URL rules that should be contained within this composite rule. * @return UrlRuleInterface[] the URL rules */ abstract protected function createRules(); /** * @inheritdoc */ public function init() { parent::init(); $this->rules = $this->createRules(); } /** * @inheritdoc */ public function parseRequest($manager, $request) { foreach ($this->rules as $rule) { /* @var $rule \yii\web\UrlRule */ if (($result = $rule->parseRequest($manager, $request)) !== false) { Yii::trace("Request parsed with URL rule: {$rule->name}", __METHOD__); return $result; } } return false; } /** * @inheritdoc */ public function createUrl($manager, $route, $params) { foreach ($this->rules as $rule) { /* @var $rule \yii\web\UrlRule */ if (($url = $rule->createUrl($manager, $route, $params)) !== false) { return $url; } } return false; } }