如何在Silverstripe url_handlers中不运行任何操作和单个变量?

时间:2014-10-12 21:44:27

标签: php silverstripe

我正在处理一个具有特殊页面类型的项目,该项目会检查单个250个字母数字字符串。

理想情况下,我希望网址结构能够像这样工作: http://www.example.com/check/I1gdTVUsnezY9SDI8V0GS2mg7Y0IdG6MqjCZ8t1yejRdi0pKzyr7G28iF0fyxOW9Le9vg3op7NnuCE0unT7d09aN00Trn7xPYAjLRhqQ9k5aRlsThsTk0HaS966MCDb4aC23RW4Cl273e9YiWKFNm2STI75X1jnlZ684M7ejDpmWg1YfM32OpwX066bF5VTp5v0F5I42T2SWh8QhMc9GW9I2ZbuP7ykh710UHnLwQyA3BO7KitZWcCU0u9

然而,使用 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只使用变量而不对自定义页面执行任何操作?

2 个答案:

答案 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它没有准备好安装模块,而是你可以配置的控制器扩展。

如果您需要任何进一步的帮助,请提供有关您的代码结构的更多信息。