我猜根据您的问题,您有 ApiOne 到 /user 的路由和 ApiTwo 到 /user 的路由?
问题是它们不是不同的路线。ZF2 将使用(我相信)在组合配置文件中最后定义的那个。如果您希望能够同时使用这两种 API 资源,则需要以某种方式拥有不同的路由。这可能实际上是将其中一个更改为/user1
.
如果您对 id 提供约束以使它们可区分,则理论上您也可以为实体路由到两个不同的端点。我的意思是你可以有两条这样的路线:
/api/user[/:user_id]
/api/user[/:user_name]
就 ZF2 路由器而言,此时,这些路由是相同的。可变部分 user_id 和 user_name 可能是同一件事。
但是,您需要其他使路线不同的东西。Apigility(和 ZF2)允许对 URL 的部分进行约束。因此,您可以对 [0-9]+ 的 user_id 施加约束,对 [az]+ 的 user_name 施加约束。这些将使实体的路由互斥,但路由的集合版本仍然相同。
在选项下的路由中添加约束,如下所示:
'router' => array(
'routes' => array(
'your-api.rest.user' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user[/:user_id]',
'defaults' => array(
'controller' => 'YourApi\\V1\\Rest\\User\\Controller',
),
'constraints' => array(
**'user_id' => '[0-9]+'**,
),
),
),
'your-api.rest.username' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user[/:user_name]',
'defaults' => array(
'controller' => 'YourApi\\V1\\Rest\\Username\\Controller',
),
'constraints' => array(
**'user_name' => '[a-z]+'**,
),
),
),
),
),
)
在此示例中,如果未提供 user_id 或 user_name,则应调用 Username 资源,因为它是最后定义的。
总的来说,我的建议是你改变路线,使它们不同。带有版本的接受标头本质上用于版本控制,而不是路由到不同的 API 资源。