模块中的控制器动作可以通过 路由 moduleID/controllerID/actionID 访问。
但是gii的url是怎么处理的。
r=gii/model
model并非一个控制器。。
请问这个路由是在哪里被处理了。。我翻 了源码并没有找到相关处理的地方
模块中的控制器动作可以通过 路由 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();就是实际上重写了分发器。