所以我正在编写一个简单的API服务器,显然C :: C :: R是正确的答案。我有一个动作来获得一个"的东西列表"工作正常:
package stuff::Controller::Thingy;
use Moose;
use namespace::autoclean;
BEGIN { extends 'Catalyst::Controller::REST'; }
__PACKAGE__->config(namespace => '');
sub thingy : Local : ActionClass('REST') { }
sub thingy_GET :Args(0) :Path("/thingy") {
}
这很有效。还有yay HashrefInflator和JSON视图。使代码非常小。
但是!如果我添加第二个动作以获得单一内容,我的原始动作将停止工作:
sub thingy_GET :Args(1) :Path("/thingy") {
my ( $self, $c, $thingy_id ) = @_;
}
当plackup开始时,我得到:
[debug] Loaded Path actions:
.-------------------------------------+--------------------------------------.
| Path | Private |
+-------------------------------------+--------------------------------------+
| /... | /default |
| /bar/thingy/... | /bar/thingy |
| /thingy/* | /thingy_GET |
| /thingy/... | /thingy |
'-------------------------------------+--------------------------------------'
如果我致电/thingy
,我会:
{
"data": []
}
想法?
答案 0 :(得分:1)
您的第二个thingy_GET
函数需要不同的函数名称。也许是thingy_GET_list
和thingy_GET_resource
,或者你想要的任何东西。
答案 1 :(得分:1)
Subs不能具有相同的名称,不同的属性是不够的,Sub :: Multi在这里没有帮助。
使用__PACKAGE__->config(action => { …
来配置操作。
答案 2 :(得分:0)
好的,那是(相对)简单的。不要把潜艇称为同一件事。我的屏幕太小了,我错过了:
子程序thing_GET在lib / foo / Controller / Thingy.pm第40行重新定义。
然而,就我所读到的那些文档而言,没有提及。
幸运的是,#催化剂对我大吼大叫。然后我向上滚动了plackup输出。