我们有这个PHP应用程序已经没有使用任何框架。我们正在利用Yii框架为我们的简单移动应用程序构建Web服务。我们对Yii框架很新。
我们按照这篇文章设法开始工作 - http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api/#hh13
主要是创建 ApiController.php 并扩展了Controller类。
我们在数据库中有3个表:Category,Subcategory,Ad。 表格关系如下:
- 类别有很多子类别
- 子类别有很多广告
醇>
在执行CRUD过程后的默认情况下,它会生成Category,Subcategory和Ad的代码。这个代码为actionList生成的问题是选择整个记录。
以下是我们简单的移动应用程序的视图:
- 将类别显示为列表视图
- 点击类别后,将子类别显示为列表视图
- 点击子类别后,将广告显示为listview
- 点击广告后,将广告显示为详细信息
醇>
看看上面的第2-4点,我们如何修改这个ApiController,我们必须在下面进行以下操作?
- 按CategoryID列出子类别
- 按SubCategoryID列出广告
以下是我们根据上述文章创建的 ApiController.php 的 actionList :
// {{{ actionList
public function actionList()
{
// $this->_checkAuth();
switch($_GET['model'])
{
case 'category': // {{{
$models = Category::model()->findAll();
break; // }}}
case 'ad': // {{{
$models = Ad::model()->findAll();
break; // }}}
case 'subcategory': // {{{
$models = Subcategory::model()->findAll();
break; // }}}
default: // {{{
$this->_sendResponse(501, sprintf('Error: Mode <b>list</b> is not implemented for model <b>%s</b>',$_GET['model']) );
exit; // }}}
}
if(is_null($models)) {
$this->_sendResponse(200, sprintf('No items where found for model <b>%s</b>', $_GET['model']) );
} else {
$rows = array();
foreach($models as $model)
$rows[] = $model->attributes;
$this->_sendResponse(200, CJSON::encode($rows));
}
} // }}}
我很感激你的帮助。
答案 0 :(得分:0)
您可以按如下方式迭代子类别(名称变量与生成的代码一样)。 $ category是您将为其显示子类别的加载模型。
foreach($category->subcategories as $subcategory)
{
// you have your subcategory
}
同样,您可以采用相同的方式迭代广告:
foreach($subcategory->ads as $ad)
{
// you have all ads under this subcategory
}
您可以将第二个代码放在第一个代码中,以便拥有所有代码。
这可以在视图或控制器中,它取决于您想要显示的方式......