【问题标题】:cakephp deal with passing wrong parameter in urlcakephp 处理在 url 中传递错误的参数
【发布时间】:2012-06-07 06:19:22
【问题描述】:

如何处理带有错误参数的正确基本网址?

Cakephp 如果你传递错误的控制器或动作名称,它会导致 404 页面。 但是如果我输入正确的控制器/动作名称和错误的参数,我该如何处理这种情况。

例子:

正确:http://localhost/controller/action?params=123 错误:http://localhost/controller/action?par23=123

par23 是错误的名称。在这种情况下,我想重定向到某些页面,例如 404 页面。是否有任何方法或配置我不需要检查控制器中的参数并每次都重定向到某个页面。

谢谢你

【问题讨论】:

  • 您使用“普通”查询字符串,而不是 Cake 的 /controller/action/param1/param2 格式或命名参数方式 /controller/action/name1:value1/name2:value2,是否有原因?
  • 不是特殊原因。个人喜好

标签: cakephp cakephp-1.3 cakephp-2.0


【解决方案1】:

您需要在控制器中手动检查。

我不会寻找任何额外的 错误 参数,而只是检查您的 needed 参数是否存在。如果没有,你可以抛出异常。

Cake 的烘焙代码就是这样做的:

// MyModelController.php
public function view($id = null) {
        $this->MyModel->id = $id;
        if (!$this->MyModel->exists()) {
            throw new NotFoundException(__('Invalid thing'));
        }

        // ...
}

所以这里需要一个 ID。如果未给出(默认值null)或不存在具有此 Id 的记录,则抛出导致 404 的异常。

请注意,这有一个额外的好处:它不仅涵盖了缺少参数的情况,而且如果参数存在但通过$id 引用不存在的项目,它也会正确返回错误。

【讨论】:

  • 好点。所以没有任何替代方法可以通过配置来做到这一点?
  • 如果没有路线符合您的要求,Cake 会给您一个 404。但是您不仅应该检查参数是否存在,还应该检查引用的项目是否存在。这就是上面代码的作用。如果您对所有模型使用类似的参数,您可以尝试在 AppController 中以更通用的方式实现这一点。
猜你喜欢
  • 2015-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2010-09-19
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多