gii模块的url是如何实现的

模块中的控制器动作可以通过 路由 moduleID/controllerID/actionID 访问。

但是gii的url是怎么处理的。

r=gii/model

model并非一个控制器。。

请问这个路由是在哪里被处理了。。我翻 了源码并没有找到相关处理的地方

gii/GiiModule.php 文件 128 行:


$this->controllerMap=$this->findGenerators();

然后具体的看下面findGenerators的实现。实际上是重写了分发器。

findGenerators该函数获取的所有可用的代码生成器和其生成代码模板, 无任何重写分发器的地方,


			$names=scandir($path);

			foreach($names as $name)

			{

				if($name[0]!=='.' && is_dir($path.'/'.$name))

				{

					$className=ucfirst($name).'Generator';

					if(is_file("$path/$name/$className.php"))

					{

						$generators[$name]=array(

							'class'=>"$alias.$name.$className",

						);

					}

                                }

			}



虽然你回答的不正确。不过还是感谢你


			$names=scandir($path);//列出gii代码生成目录中的文件和目录

			foreach($names as $name)//循环每个文件

			{

				if($name[0]!=='.' && is_dir($path.'/'.$name))//如果不是根目录。。或者这个文件是一个目录

				{

					$className=ucfirst($name).'Generator';//则获得该生成器的类名。。例如model。则生成控制器类名为modelGenerator

					if(is_file("$path/$name/$className.php"))//检查该文件是否存在

					{

						$generators[$name]=array(//获得其路径别名

							'class'=>"$alias.$name.$className",

						);

					}

findGenerators该函数获取的所有可用的代码生成器和其生成代码模板。

$name[0]!==’.’ 是处理掉 ‘.’ 当前目录,’…’ 上级目录,和 ‘.svn’ 之类的特殊目录。

我说的是“实际上”,这里改变了yii默认的分发规则。

我的注释已经写的很明白了。。

除非你能给出一个另外的整体注释

我也说的很明白了。$this->controllerMap=$this->findGenerators();就是实际上重写了分发器。