如何在Yii Framework中添加新操作?

时间:2013-09-16 19:28:45

标签: php yii

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

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

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

我们在数据库中有3个表:Category,Subcategory,Ad。 表格关系如下:

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

在执行CRUD过程后的默认情况下,它会生成Category,Subcategory和Ad的代码。这个代码为actionList生成的问题是选择整个记录。

以下是我们简单的移动应用程序的视图:

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

看看上面的第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));
        }
    } // }}} 

我很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

您可以将第二个代码放在第一个代码中,以便拥有所有代码。

这可以在视图或控制器中,它取决于您想要显示的方式......