特例@形式
在'map'映射和'args'参数中,我们还可以设置映射名称“@”的映射,它的作用是:当无法找到映射和控制器的时候,会默认执行“@”映射对应的控制器/动作,这样就可以实现一些类似“泛域名”形式的URL了。
普通的映射:
speedphp.com/groups.html
speedphp.com/cms.html
除了这些系统控制器之外的名字,全部用于用户自己的域名:
speedphp.com/jake
speedphp.com/myblogger
'spUrlRewrite' => array( 'suffix' => '.html', 'sep' => '-', 'map' => array( 'groups' => 'group@index', 'cms' => 'main@index', '@' => 'user@index', ), 'args' => array( 'groups' => array('tid'), '@' => array('username'), ), ),
speedphp.com/标识.html,当“标识”的符合以下两个条件的时候,将执行 user/index 参数$this->spArgs('username') = 标识。
map中没有键是等于“标识”的。
没有一个控制器名称等于“标识”的,如果“标识”的名称是控制器,那么会优先执行控制器。
这种@映射实现的对应地址,其实和前面的普通映射+参数是几乎相同的作用,唯一的不同,是@映射不需要加入对应的控制器名称或映射名称,相当于映射值为空。如:
普通映射+参数:
speedphp.com/member-user1.html
speedphp.com/member-user2.html
。。。
@映射:
speedphp.com/user1.html
speedphp.com/user2.html