Coldfusion CFWheels-如果params.key不存在,是否重定向用户?
我有一个基本的控制器动作,它执行findByKey()。URL看起来像: /pin/show/45 但是,如果“45”不存在(params.key),我想将它们重定向到just/pin/ 目前,当没有指定任何键时,它似乎仍然显示所有帖子的显示操作。我对此有点困惑 此外,如果我在params.key的show()操作中执行检查,则它不会按预期工作;我的重定向没有发生…即使转储参数,也显示不存在密钥 下面是我的show()动作: 任何帮助都将不胜感激 谢谢, 迈克尔 更新: 这似乎与路线有关?以下是我的pin路线:Coldfusion CFWheels-如果params.key不存在,是否重定向用户?,coldfusion,railo,cfwheels,Coldfusion,Railo,Cfwheels,我有一个基本的控制器动作,它执行findByKey()。URL看起来像: /pin/show/45 但是,如果“45”不存在(params.key),我想将它们重定向到just/pin/ 目前,当没有指定任何键时,它似乎仍然显示所有帖子的显示操作。我对此有点困惑 此外,如果我在params.key的show()操作中执行检查,则它不会按预期工作;我的重定向没有发生…即使转储参数,也显示不存在密钥 下面是我的show()动作: 任何帮助都将不胜感激 谢谢, 迈克尔 更新: 这似乎与路线有关?以下是
addRoute(name="pinShow", pattern="pin/show/[key]", controller="pin", action="show");
addRoute(name="pinEdit", pattern="pin/edit/[key]", controller="pin", action="edit");
addRoute(name="pinDelete", pattern="pin/delete/[key]", controller="pin", action="delete");
addRoute(name="pinUpdate", pattern="pin/update", controller="pin", action="update");
addRoute(name="pinNew", pattern="pin/new", controller="pin", action="new");
addRoute(name="pinCreate", pattern="pin/create", controller="pin", action="create");
addRoute(name="pinWanted", pattern="pin/wanted", controller="pin", action="wanted");
addRoute(name="pin", pattern="pin", controller="pin", action="index");
现在,这些路由中的许多可能看起来毫无意义,因为它们使用与没有路由时相同的URL模式,但计划在将来更改这些
当我在没有键的情况下点击/pin/show/时,它似乎加载到/pin/index/controller和action中,但仍然在URL中显示/pin/show/。您可以使用初始值设定项将其清理干净
function init() {
verifies(
only = "show",
params = "key",
paramsTypes = "integer",
handler = "handleInvalidShowParams"
);
}
function show() {
param name="params.page" default="1";
param name="params.pageQuantity" default="10";
pins = model("pin").findByKey(
key = params.key,
returnAs = "query",
include = "user",
order = "createdat DESC",
page = params.page,
perPage = params.pageQuantity
);
}
private function handleInvalidShowParams() {
flashInsert( messages = [{ messageString="Key is required.", messageType="error" }] );
redirectTo(route="pin");
}
如您所见,我们添加了一个检查以确保键
存在并且是一个整数。如果这些测试中的任何一个失败,控制器将运行handleInvalidShowParams()
,它可以执行您需要它执行的任何操作
这将使show()
的范围保持在它需要担心的范围内,控制器中的其他机制可能会担心参数验证
更新
请看第二行,我在其中添加了:
addRoute(name="pinShow", pattern="pin/show/[key]", controller="pin", action="show");
addRoute(name="pinShow", pattern="pin/show", controller="pin", action="show");
addRoute(name="pinEdit", pattern="pin/edit/[key]", controller="pin", action="edit");
addRoute(name="pinDelete", pattern="pin/delete/[key]", controller="pin", action="delete");
addRoute(name="pinUpdate", pattern="pin/update", controller="pin", action="update");
addRoute(name="pinNew", pattern="pin/new", controller="pin", action="new");
addRoute(name="pinCreate", pattern="pin/create", controller="pin", action="create");
addRoute(name="pinWanted", pattern="pin/wanted", controller="pin", action="wanted");
addRoute(name="pin", pattern="pin", controller="pin", action="index");
我相信不用钥匙就能捕捉到/pin/show
模式
作为额外的补充,我可能建议您查看和,因为它使这些内容变得更加琐碎。代码是否将其纳入您的if语句中?键是否已定义,但为空?无论结构中是否显示params.key,if语句中的代码都不会执行。但是有趣的是,当我转储参数时,我看到操作是索引。因此,几乎就好像当没有找到记录时,它只是加载默认操作——而不是我想要的,因为URL仍然显示/pin/show/Hi-Chris!谢谢我已经使用了你的代码,但是当密钥丢失时,它仍然无法执行代码。它重定向和显示闪存的唯一时间是当类型为字符串而不是数字时。应用程序似乎仍在URL中显示/pin/show/action,但将/pin/index/action加载到此URL中。知道为什么会这样吗?轮子在某种默认动作上后退是标准的吗?您可能希望添加另一条路线,该路线捕捉到
pin/show
,而不使用[键]
,并将其指向show动作。它可能会返回到索引
,因为缺少键导致它与索引
路径匹配。如果您需要更多帮助,请在问题中添加route.cfm
的相关部分。嗨,克里斯,我已经更新了我的初始帖子,在/pin/controller上显示了我的路线。任何帮助都将不胜感激。在我看来这很好,但也许这太明显了,我已经对这个问题视而不见。请参阅更新的答案。您可能希望对所有缺少键值的路由重复此方法。太棒了!一如既往,你对我帮助很大。非常感谢。添加额外的路由条件似乎会将其踢入预期行为。
addRoute(name="pinShow", pattern="pin/show/[key]", controller="pin", action="show");
addRoute(name="pinShow", pattern="pin/show", controller="pin", action="show");
addRoute(name="pinEdit", pattern="pin/edit/[key]", controller="pin", action="edit");
addRoute(name="pinDelete", pattern="pin/delete/[key]", controller="pin", action="delete");
addRoute(name="pinUpdate", pattern="pin/update", controller="pin", action="update");
addRoute(name="pinNew", pattern="pin/new", controller="pin", action="new");
addRoute(name="pinCreate", pattern="pin/create", controller="pin", action="create");
addRoute(name="pinWanted", pattern="pin/wanted", controller="pin", action="wanted");
addRoute(name="pin", pattern="pin", controller="pin", action="index");