我正在阅读opencart php源代码,但我搞不懂。请在"$url = $rewrite->rewrite($url);“查看函数rewrite()。
<?php
class Url {
private $url;
private $rewrite = array();
public function link($route, $args = '', $connection = 'NONSSL') {
....
foreach ($this->rewrite as $rewrite) {
$url = $rewrite->rewrite($url);
}
return $url;
}
public function addRewrite($rewrite) {
$this->rewrite[] = $rewrite;
}
}
?>
为什么上面的代码不会产生错误?
重写函数没有在类Url中定义,并且类Url没有扩展任何人??但后来我更深入地追踪,似乎函数重写是在seo_url类上。
class ControllerCommonSeoUrl extends Controller {
// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
}
...
public function rewrite($link) {
if ($this->config->get('config_seo_url')) {
$url_data = parse_url(str_replace('&', '&', $link));
....
为什么?我还没有看到'Url‘和这个'ControllerCommonSeoUrl’之间的任何联系。我是不是漏掉了什么概念?我应该怎么做才能理解这些代码?这里需要一点指导。
发布于 2012-11-22 11:17:02
foreach ($this->rewrite as $rewrite) {
迭代遍历中的任何值:
private $rewrite = array();
也许那个Url->rewrite
数组包含ControllerCommonSeoUrl
的一个实例,这就解释了为什么$rewrite->rewrite()
调用ControllerCommonSeoUrl->rewrite()
。
此外,您也可以通过尝试学习使用调试器来帮自己一个忙:)
发布于 2012-11-22 11:26:51
检查控制器是否正在加载脚本中的任何模型如果是,则可以在脚本中简单地访问模型方法,这可能是脚本的情况,如$this->重写。
发布于 2012-11-22 12:02:39
Url
类是一个泛型类,可以调用多个网址重写方法,使人们可以更改网址重写代码。触发SEO代码以将其添加到Url
类是在index.php
文件中通过以下方式完成的
// SEO URL's
$controller->addPreAction(new Action('common/seo_url'));
执行该操作时,ControllerCommonSeoUrl
将执行index()
方法,并且与您提供的代码一样,它将检查SEO在设置中是否处于活动状态。如果是,则将当前类添加到Url
类中的重写数组中。然后,每当有人调用$this->url->link()
时,每个重写类都会调用它们的rewrite()
方法,随后的URL会被回传
https://stackoverflow.com/questions/13511196
复制