我有以下想法:我希望能够在任何给定的控制器中定义默认前缀。因此,假设CitiesController的默认前缀使用"admin" prefix ("admin_index", "admin_add", etc.),
实现所有操作,但ProvincesController使用
"superadmin" prefix ("superadmin_index", "superadmin_add", etc.)
问题是,每次我想要链接到任何“城市东西”时,我必须指定“admin”=> “真正”。任何时候我想链接到任何“省份”,我必须指定
"superadmin" => "true".
最初这已经有了相当多的工作,但如果我决定将城市的前缀从“admin”改为“superadmin”,那将会更加有效。
所以我想知道是否会以某种方式做一些事情:
class CitiesController extends AppController {
var $defaultPrefix = "admin"
}
然后在HTML帮助程序链接功能中,执行以下操作:
class LinkHelper extends AppHelper {
public $helpers = array('Html');
function myDynamicPrefixLink($title, $options) {
// check whether prefix was set (custom function that checks all known prefixes)
if (! isPrefixSet($options)) {
// no clue how to get the controller here
$controller = functionToGetControllerByName($options['controller']);
// check whether controller has a defined default prefix
$prefix = $controller->defaultPrefix;
if ($prefix) {
// set the given prefix to true
$options[$prefix] = true;
}
// use HTML helper to get link
return $this->Html->link($title, $options);
}
}
我不知道如何动态地从助手到达给定名称的控制器。
另一种选择是将默认前缀存储在其他地方,但是现在我觉得最好的地方是任何给定的控制器本身。
另一个想法是甚至让查找功能依赖于控制器和动作,而不仅仅是控制器。
答案 0 :(得分:1)
您应该能够使用Router :: connect提供默认值(请参阅Github上的代码和文档:link),以指定某些控制器甚至操作的默认前缀。
但是,如果您想要比当前路由器提供的更多灵活性,可以通过指定要使用的备用Route类来扩展您对Router :: connect的使用:
Router::connect(
'/path/to/route',
array('prefix' => 'superadmin'),
array('routeClass' => 'MyCustomRouter')
);
可以在CakePHP documentation中看到这方面的例子。