在Yii中处理URL路由/控制器的最佳方法

时间:2011-11-05 20:12:54

标签: php url-routing yii

我正在尝试开发RESTful Yii Web服务。在项目的顶层,我有我的模型,它是使用数据库模式+ GiiX创建的。我有一个Web服务(ws)模块,我希望Web服务存在。现在模型非常简单:

  • Product(属于Brand,有一个Analysis
  • Brand(有很多Product
  • Analysis(属于一个Product

我想智能地创建urlManager规则,以便在创建新操作和/或新控制器时不必继续添加新规则。我不确定的是如何实现这一目标。请记住,目前我只是想让用户能够根据标准列出一些过滤器。

首先,我应该为我可能要处理的每个模型创建一个单独的控制器 - 例如ws/ProductControllerws/BrandControllerws/AnalysisController - 或者我应该只有一个ws/WebServiceController与每个潜在的返回类型对应的动作?

在回答第一个问题时,我应该使用哪些URL规则来完成以下任务:

  • 对没有参数的ws/*控制器执行操作;
  • 使用某些参数对ws/*控制器执行操作;

此外,目前我只是使用GET。

我确实看过Yii关于创建RESTful API的http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api/页面,但对如何将他们的示例应用到我自己的方面感到有些困惑。

2 个答案:

答案 0 :(得分:0)

你可以做任何一种方式。创建单独的控制器并将多个操作放在单个控制器中都可以工作。我个人认为创建一个Ws模块并在其中放置多个控制器会很好。每个型号一个:

modules
  ws
    controllers
      ProductController
      BrandController
      …  

通过这种方式,您可以自动获得足够好的网址:ws/productws/brandws/brand/searchws/product/order等。

答案 1 :(得分:0)

  

首先,我应该为每个我想要的模型创建一个单独的控制器   工作 - 像ws / ProductController,ws / BrandController,   ws / AnalysisController - 或者我应该只有一个   ws / WebServiceController,具有与每个潜在对应的操作   返回类型?

我也认为这取决于你的申请。就个人而言,我会为每个模型创建一个自己的控制器,如果需要,可以引入一个基类,行为或过滤器。

  

对没有参数的ws / *控制器执行操作;做一个动作   带有一些参数的ws / *控制器;

假设您的模块已注册为“webService”,您可以使用以下规则:

'ws/<_c>' => 'webService/<_c>',
'ws/<_c>/<model:\w+>/<id:\d+>' => 'webService/<_c>',

$ _GET参数的使用不依赖于您的规则,您可以使用它们更好地使用URL。