2

我今天从 SS 3.0 升级到 3.1,自从更新后,系统似乎没有在我的扩展的 _config 文件夹中检测到我的 routes.yml 文件。这是我的 myextension/_config/routes.yml 文件的示例:

---
Name: pusherroutes
After: 
  - '#rootroutes'
---
Director:
  rules:
    # handle old 2.4 style urls
    'pusher/$Action': 'PusherController'

我还设置了我的 allowed_actions 静态以将我的控制器操作列入白名单:

class PusherController extends Controller {
    public static $allowed_actions = array (
    'ChatAuth',
    'SendMessage',
    'NotifyAuth'
    );
}

当我导航到 mysite.com/pusher/SendMessage 时,系统不再将我引导至控制器上的操作方法。在我的网络选项卡中返回的响应是 Silverstripe 入门页面。

4

1 回答 1

3

这是因为$Action参数被匹配了两次。当初始pusher/$Action路由匹配时,URL 的前两部分作为匹配的一部分被使用。然后将控制权传递给您的PusherController对象。然后尝试再次将 URL 与操作匹配,但由于没有要解析的 URL,因此它确定不存在任何操作,因此它路由到该index操作,该操作反过来显示入门信息。

要解决此问题,只需使用:

Director:
  rules:
    'pusher': 'PusherController'

并依赖于将控制权交给PusherController.

于 2013-03-30T12:18:43.083 回答