我正在处理一个具有特殊页面类型的项目,该项目会检查单个250个字母数字字符串。
然而,使用 allowed_actions 和 url_handlers 的标准方法,如果我用" uid"前缀字母数字字符串,我只能让它工作。 - http://www.example.com/check/uid/string-goes-here
class CheckPage_Controller extends Page_Controller {
private static $allowed_actions = array(
'uid'
);
private static $url_handlers = array(
'uid/$uID' => 'uid'
);
是否可以让url_handlers只使用变量而不对自定义页面执行任何操作?
答案 0 :(得分:1)
您可以在 _config.php 中定义没有操作的路线:
Director::addRules(100, array(
'check/$UID' => 'CheckPage_Controller'
));
并在您的 CheckPage_Controller 中,您可以在索引函数中捕获请求:
public function index() {
var_dump($this->request->allParams());die;
}
但是你应该知道add路由捕获所有请求/ check / whatever。所以你需要为其他东西定义一个不同的URL。
答案 1 :(得分:0)
假设您有一个页面类型" CheckPage"使用$ URLSegment"检查"和一些has_many关系的Dataobjects你可以使用Nightjars扩展来使用这个urlslug方法,这非常优雅:
https://github.com/NightJar/silverstripe-slug/
ATM它没有准备好安装模块,而是你可以配置的控制器扩展。
如果您需要任何进一步的帮助,请提供有关您的代码结构的更多信息。