symfony2

时间:2016-10-05 17:30:36

标签: symfony routing

我是Symfony2的初学者,我只是想知道args的一致性是否必须在控制器中完成,或者是否存在我不知道的机制

让我们举个例子:

我有像/ company / id / user / id这样的路线来显示用户的一些信息

我已尝试手动更改公司或用户的ID,如果用户不是来自公司,则没有错误?!

如果用户和公司绑定,我是否必须检查控制器displayUserAction?

/**
 * @Route("/company/{company_id}/user/{site_id}")
 * @ParamConverter("company", class="MyModel\Company", options={"mapping": {"company_id": "id"}})
 * @ParamConverter("site", class="MyModel\User", options={"mapping": {"site_id": "id"}})
 */
public function displayUserAction(Company $company, User $user)
{
..
}

routing.yml
user_info:
path:     /company/{company_id}/user/{site_id}
defaults: { _controller: UserBundle:Default:displayUser } 

编辑: 我找到了另一种方法:使用多个标准进行地图

/**
 * @Route("/company/{company_id}/user/{site_id}")
 * @ParamConverter("company", class="MyModel\Company", options={"mapping": {"company_id": "id"}})
 * @ParamConverter("site", class="MyModel\User", options={"mapping": {"site_id": "id", "company_id":"company"}})
 */
public function displayUserAction(Company $company, User $user)
{
..
}

1 个答案:

答案 0 :(得分:0)

您可以在Action中重新排序所有参数。 Symfony非常聪明,可以匹配这些参数 - 但你应该保持命名的一致性 - 无论如何你都要这样做。 Symfony会将您路线中的{company_id}与您的行动中的$company匹配,例如,无论您将其置于何处。

在您的路线中,要匹配的路线需要两个参数。因此,如果两个参数都绑定,则路径将仅匹配工作。

在您的操作中,您需要检查用户是否属于公司。如果两个实体相关,那么Route和Action的架构并不关心,他们只关心已经提供了一个值。