有什么方法可以随时从urlManager中删除网址规则吗?
我知道我可以通过urlManager->addRules()
添加规则,但如何删除它们?
感谢。
编辑:
我的目标是根据子域动态生成规则。
例如,某个类型的子域将具有导致特定产品的规则<catalog>/<brand>/<product>
,而另一个将具有不同的规则。此外,子域也是动态的,这意味着我无法创建任何静态条件。
答案 0 :(得分:2)
这里有所有规则:
Yii::app()->urlManager->rules;
这是一个关联数组,你可以轻松地遍历它并操纵它。
答案 1 :(得分:0)
如果您能提供有关您需要此类行为的详细信息,那就太棒了。
通常,您可以扩展默认的CUrlManager
类并添加所需的功能。之后,您可以在CustomUrlManager
中指定这个新的config.php
,作为urlManager
的实施。
但是又一次 - 你试图解决什么问题?
答案 2 :(得分:0)
不幸的是,没有一个明确的方法来解决这个问题。
内部规则数组_rules
被声明为私有,除了addRules()
之外,没有其他方法可以使用它。但是,此方法仅允许您将已处理的规则附加到_rules
数组的开头/结尾。您也无法删除已添加的规则。
我提出的解决方案是不好的做法,但没有其他办法解决我的问题(我知道)。
在 CUrlManager
protected function clearInnerRules() {
$this->_rules = array(); // clears the inner rules array
}
在用作Yii应用程序管理器的子类UrlManager
中,声明:
public function reprocessRules() {
Yii::app()->cache->delete(self::CACHE_KEY); // remove anything rule-connected from cache
$this->clearInnerRules();
$this->processRules();
}
使用onBeginRequest
事件,将规则添加到数组中的占位符:
// code
Yii::app()->urlManager->rules['rulePlaceholder'] = $newRule;
Yii::app()->urlManager->reprocessRules();
// code
完成。现在我可以轻松删除规则或随时替换它们(前提是,此时刻在请求之前)。有时候你只需要做你必须做的事情,我想。