Coldfusion CFWheels-如果params.key不存在,是否重定向用户?

Coldfusion CFWheels-如果params.key不存在,是否重定向用户?,coldfusion,railo,cfwheels,Coldfusion,Railo,Cfwheels,我有一个基本的控制器动作,它执行findByKey()。URL看起来像: /pin/show/45 但是,如果“45”不存在(params.key),我想将它们重定向到just/pin/ 目前,当没有指定任何键时,它似乎仍然显示所有帖子的显示操作。我对此有点困惑 此外,如果我在params.key的show()操作中执行检查,则它不会按预期工作;我的重定向没有发生…即使转储参数,也显示不存在密钥 下面是我的show()动作: 任何帮助都将不胜感激 谢谢, 迈克尔 更新: 这似乎与路线有关?以下是

我有一个基本的控制器动作,它执行findByKey()。URL看起来像:

/pin/show/45

但是,如果“45”不存在(params.key),我想将它们重定向到just/pin/

目前,当没有指定任何键时,它似乎仍然显示所有帖子的显示操作。我对此有点困惑

此外,如果我在params.key的show()操作中执行检查,则它不会按预期工作;我的重定向没有发生…即使转储参数,也显示不存在密钥

下面是我的show()动作:

任何帮助都将不胜感激

谢谢, 迈克尔

更新:

这似乎与路线有关?以下是我的pin路线:

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");