Restler 3 - 参数的默认值阻止传入参数的能力

时间:2012-10-10 10:50:39

标签: php restler

我有一个非常简单的类,它派生自Restler网站上给出的示例“Say”类​​。它如下:

 <?php
class Say {
  function hello($to='world') {
    return "Hello $to!";
  }
  function hi($to) {
    return  "Hi $to!";
  }

  function nothing($to='the ground') {
    return "Looks at {$to} quietly but without saying a word.";
  }
}

因为“hi”函数没有$ to变量的默认值,所以它在很大程度上可以正常工作:

http://localhost/api/say/hi/Jack

返回

  

嗨杰克!

大。问题是当你有一个默认值,如“hello”或“nothing”函数时,你似乎无法传递参数:

http://localhost/api/say/hello          -- WORKS, returns "Hello world!"
http://localhost/api/say/hello/Jack     -- FAILS, returns a JSON error of 404

非常感谢任何帮助。

另外,我还注意到,如果你不使用带有“hi”的参数(要求将$设置为某个东西),它也会返回404错误。我不确定这是否是预期的行为,但对于这种错误,它似乎是错误的错误消息。

1 个答案:

答案 0 :(得分:3)

Restler 2完全按照您的预期工作,对于上面的hello方法,它生成以下路径

GET say/hello      ⇠ Say::hello()
GET say/hello/{to} ⇠ Say::hello()

但是,Restler 3只生成一条路线

GET say/hello   ⇠ Say::hello()

这是因为智能路由,我们没有将可选参数映射到url,因此可选参数可以作为查询字符串传递

在hi方法的情况下,Restler 2将其路由为

GET say/hi      ⇠ Say::hi()
GET say/hi/{to} ⇠ Say::hi()

作为Restler 3的地方

GET say/hi/{to} ⇠ Say::hi()

因此,say/hi因缺少必需参数而失败

这样做的原因是为了避免歧义。这里将在routing example

中进行解释

如果您希望Restler 3中的所有API使用Restler 2行为,请将以下内容添加到index.php

Defaults::$smartAutoRouting = false;

如果您只想在方法级别或类级别关闭智能自动路由,请添加以下php doc注释

@smart-auto-routing false