-1

我们有这个 PHP 应用程序已经不使用任何框架。我们正在利用 Yii 框架为我们的简单移动应用程序构建 Web 服务。我们对 Yii 框架还很陌生。

我们按照这篇文章并设法开始工作 - http://www.yiiframework.com/wiki/175/how-to-create-a-rest-api/#hh13

主要是它只是创建了ApiController.php并扩展了 Controller 类。

我们在数据库中有 3 个表:类别、子类别、广告。表关系如下:

  1. 类别有很多子类别
  2. 子类别有很多广告

目前默认情况下,在进行 CRUD 处理后,它会生成 Category、Subcategory 和 Ad 的代码。我们遇到的问题是此代码为 actionList 生成为选择整个记录。

这是我们简单的移动应用程序的视图,如下所示:

  1. 将类别显示为列表视图
  2. 单击类别后,将子类别显示为列表视图
  3. 单击子类别后,将广告显示为列表视图
  4. 点击广告后,将广告显示为详细信息

看上面的2-4点,我们要怎么修改这个ApiController呢,下面我们要做的事情呢?

  • 按 CategoryID 列出子类别
  • 按 SubCategoryID 列出广告

这是我们根据上面的文章创建的ApiController.phpactionList :

// {{{ 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));
        }
    } // }}} 

我很感激你的帮助。

4

1 回答 1

0

您可以按如下方式迭代子类别(在生成的代码中命名变量)。$category 是您将为其显示子类别的加载模型。

foreach($category->subcategories as $subcategory)
{
    // you have your subcategory 
}

同样,您可以以相同的方式迭代广告:

foreach($subcategory->ads as $ad)
{
     // you have all ads under this subcategory
}

您可以先将第二个代码放入其中以获取所有代码。

这可以在视图或控制器中,这取决于您要如何显示...

于 2013-09-16T19:38:39.557 回答