我正在尝试开发RESTful Yii Web服务。在项目的顶层,我有我的模型,它是使用数据库模式+ GiiX创建的。我有一个Web服务(ws)模块,我希望Web服务存在。现在模型非常简单:
Product
(属于Brand
,有一个Analysis
)Brand
(有很多Product
)Analysis
(属于一个Product
)我想智能地创建urlManager
规则,以便在创建新操作和/或新控制器时不必继续添加新规则。我不确定的是如何实现这一目标。请记住,目前我只是想让用户能够根据标准列出一些过滤器。
首先,我应该为我可能要处理的每个模型创建一个单独的控制器 - 例如ws/ProductController
,ws/BrandController
,ws/AnalysisController
- 或者我应该只有一个ws/WebServiceController
与每个潜在的返回类型对应的动作?
在回答第一个问题时,我应该使用哪些URL规则来完成以下任务:
ws/*
控制器执行操作; ws/*
控制器执行操作; 此外,目前我只是使用GET。
我确实看过Yii关于创建RESTful API的http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api/页面,但对如何将他们的示例应用到我自己的方面感到有些困惑。
答案 0 :(得分:0)
你可以做任何一种方式。创建单独的控制器并将多个操作放在单个控制器中都可以工作。我个人认为创建一个Ws
模块并在其中放置多个控制器会很好。每个型号一个:
modules
ws
controllers
ProductController
BrandController
…
通过这种方式,您可以自动获得足够好的网址:ws/product
,ws/brand
,ws/brand/search
,ws/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。