SLIM API:用于相同操作的多个/替代路由

时间:2014-08-10 16:05:35

标签: php api slim

我们正在使用SLIM框架构建API。在我们的API层次结构中,一些特定的操作可用于多个路径。这是一个例子:

$app->get('/surveys/:sid/contacts/:cid', function ($sid, $cid) use ($user) {
    // Do stuff
});

OR

$app->get('/contacts/:cid/surveys/:sid', function ($cid, $sid) use ($user) {
    // Do same stuff
});

我们已经看到了一些方法(例如Multiple routes with the same anonymous callback using Slim Framework)并且能够通过引用匿名函数来实现这一点。

$app->get('/surveys/:sid/contacts/:cid', $ref = function ($sid, $cid) use ($user) {
    // Do stuff
});

AND

$app->get('/contacts/:cid/surveys/:sid', $ref); // Calls the same stuff, but with different order of arguments (wrong)

但是我们怎样才能处理更改传递参数的顺序(&#34; $ sid,$ cid&#34;&#34; $ cid,$ sid&#34;)?< / p>

谢谢!


谢谢Andrew Smith的回答!我们将使用稍微不同的实现:

function doStuff($user, $sid, $cid) {
    // Do stuff
}

$app->get('/surveys/:sid/contacts/:cid', function ($sid, $cid) use ($user) {
    doStuff($user, $sid, $cid);
});

$app->get('/contacts/:cid/surveys/:sid', function ($cid, $sid) use ($user) {
    doStuff($user, $sid, $cid);
});

1 个答案:

答案 0 :(得分:2)

由于您使用相同的功能,除了创建另一个可以调用第一个函数的函数之外,实际上并没有这样做的方法。见下面的例子。

<?php

function firstFunction ($sid, $cid) {
    // Do stuff
};

function secondFunction ($cid, $sid) {
    return firstFunction($sid, $cid);
};

$app->get('/surveys/:sid/contacts/:cid', 'firstFunction');

$app->get('/contacts/:cid/surveys/:sid', 'secondFunction');