<?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\web; use Yii; use yii\base\Object; /** * CompositeUrlRule is the base class for URL rule classes that consist of multiple simpler rules. * * @author Qiang Xue <qiang.xue@gmail.com> * @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; } }