路由设置拦截器且对当前路由生效吗?

QQ图片20190614174338.png

测试了一下,add进去的下级路由是不生效的。

评论区

JFinal

2019-06-14 17:57

routes 级别的拦截器只在本 Routes 中有效,不能往下传递到子 Routes 中

天晴

2019-06-14 18:01

感谢波总,已改为 add(new ModuleRoutes().addInterceptor(new SetMainMenusInterceptor()));

杜福忠

2019-06-14 18:11

想要实现这样的效果,可以自己建一个 MyRoutes, 重写一下:
public Routes add(Routes routes) {
for(Interceptor x : getInterceptors()) routes.addInterceptor(x);
super.add(routes);
return this;
}
自己的业务 Routes 都去继承 MyRoutes 就可以了吧

JFinal

2019-06-14 21:30

@天晴 你不写出来我还记了有这么个方法,在 new XxxRoutes() 的同时可以直接 addInterceptor(...),这种用法最好

天晴

2019-06-15 22:29

@杜福忠 感谢大佬

天晴

2019-06-17 11:20

@JFinal 波总,下一个版本是否考虑添加此功能?
Routes的add(Routes routes)方法里添加:
for(Interceptor x : getInterceptors()) {
routes.addInterceptor(x);
}
实现拦截器下传?

JFinal

2019-06-17 11:34

@天晴 多数情况下,不建议使用多层拦截器,而是 AdminRoutes、FrontRoutes、WeixinRoutes ...... 这样扁平化来使用

少数确实要使用多层 routes 的,可以用你的办法:
add(new ModuleRoutes().addInterceptor(new SetMainMenusInterceptor()));

加你建议的这个功能也不难,但这个需求貌似不强烈,很少有人提起

加了的话,最大的问题在于,如果有人不希望在下层 routes 中使用上层的拦截器, 还要想办法去掉,而去掉的话就十分麻烦了

JFinal

2019-06-17 11:37

@天晴

总之:
1: 需求不太强烈
2: 要满足这个需求,可以通过你的办法多一行代码解决,很方便,也很好理解,没有学习成本
3:如果要加上这个功能,如果用户要在下层的子 Routes 中去除上层的拦截器相当麻烦

设计就是无处不在的权衡取舍,没有完美,只有追求最佳平衡

天晴

2019-06-17 11:38

了解

热门反馈

扫码入社