我今天从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入门页面。
答案 0 :(得分:3)
这是因为$Action
参数匹配了两次。当匹配初始pusher/$Action
路由时,URL的前两部分将作为匹配的一部分使用。然后将控制权传递给您的PusherController
对象。然后,这会尝试再次将URL与操作匹配,但由于没有要解析的URL,因此它决定不存在任何操作,因此它会路由到index
操作,进而显示入门信息
要解决此问题,请使用:
Director:
rules:
'pusher': 'PusherController'
并依赖于在将控制权交给PusherController
时执行的操作匹配。