是否有可能使用子文件夹将帆控制器分组?
我打算组织我的控制器使用子文件夹帆,但我不知道如何做到这一点。 当我尝试使用像pipe理员/ PageController.js和连接它与路线我不断收到404错误。
你绝对可以做到这一点。 诀窍是,控制器身份是它的path,在你的情况下admin/PageController
。 所以config/routes.js
一个自定义路由就像这样:
'GET /admin/page/foo': 'admin/PageController.foo'
最棒的是,自动操作仍然有效,所以如果你在控制器中有一个index
操作,那么浏览到/admin/page
会自动运行它。
你也可以使用sails generate controller admin/page
来创build这样的sails generate controller admin/page
。
编辑
既然提交8e57d61,你可以这样做,以获得嵌套的控制器上的blueprint
路线和function,假设您的项目中有一个AdminPage
模型:
// api/controllers/admin/PageController.js module.exports = { _config: { model: 'adminpage' } }
或这个:
// config/routes.js module.exports.routes = { 'admin/page': { model: 'adminpage' } }
老答案
你的select
-
在
config/routes.js
定义到分组控制器的显式路由。 看看Scott Gress的回答,了解更多细节。 -
(如果你有点冒险)因为我有我的项目完全相同的要求,我创build了一个请求在帆上,允许您覆盖模型 – 控制器关联。 你可以通过安装它
npm install -g git://github.com/marionebl/sails.git#override-controller-model
假设它是
api/models/Page.js
模型,你需要api/controllers/admin/PageController.js
上的蓝图方法,你可以这样做:// api/controllers/admin/PageController.js ... module.exports = { _config: { model: 'page' } }
说明
虽然像这样生成/创build分组控制器是完全有效的,但是您将不会得到您所期望的控制器的默认蓝图路线以及具有相同身份的模型。
例如, api/controllers/UserController.js
和api/models/User.js
共享相同的身份user
,因此如果在config/blueprints.js
中启用了蓝图路由,它们将被挂载。
事实上目前不可能以合理的方式将模型分组到子文件夹中。 这意味着您将无法创build与您的控制器api/controllers/admin/PageController.js
的身份admin/page
相匹配的模型 – 未为PageController
安装蓝图路由。
负责此行为的源可以在Github上进行检查 。
我做了一个图表,显示隐式路由,显式策略,嵌套控制器,奇异模型和嵌套视图是如何相关的。 它不显示如@marionebl所述的重写的模型 – 控制器关联。
对我来说,这个练习大部分是为了更好地理解这个话题,但是我希望它也能帮助其他人。 请让我知道如果我犯了什么错误:
感谢merionebl,它对我的工作很好,我想和所有人分享我的答案派生自merionebl答案。
/config/routes.js
'get /admin/user' : { controller: "Admin/UserController", action: "find", model : 'user', },
我的目的不是重复回答,只是有升级和明确的例子。
谢谢