0

我使用 yii 框架,但这里有一个 php 问题。我很难从一个循环中获取数据,该循环从我的控制器开始,在我的模型中继续并在我的控制器中结束。这是我的代码:

adminController.php

public function actionAdmin()
{
////code generated by gii////
    $model=new vbnm('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['vbnm'])){
        $model->attributes=$_GET['vbnm'];
    }

////my code////
    $groupid=array();

    $dataArray = vbnm::model()->search()->getData();

    foreach($dataArray as $data){
        $groupid[] = $data->groupvb['joinvbgroup_group_id'];
    }
    $size = count($groupid);

    $values = array();

    for ($i=0; $i<$size; $i++){
        $model->get_user_name($groupid[$i]);
    }

    $this->render('admin',array(
        'model'=>$model,
    ));
}

adminModel.php

public function get_user_name($groupId)
{           
    $userid = array();

    $user = Yii::app()->db->createCommand()
    ->select('joinusergroup_user_id')
    ->from('JoinUserGroup')
    ->where('joinusergroup_group_id=:id', array(':id'=>$groupId))
    ->query();

    foreach($user as $key=>$value){
        $userid[] = $value['joinusergroup_user_id'];
    }

    $size=count($userid);

    $username = array();

    for($i=0; $i<$size; $i++){

        $name = Yii::app()->db->createCommand()
        ->select('username')
        ->from('tbl_users')
        ->where('id=:id', array(':id'=>$userid[$i]))
        ->query();

        foreach($name as $key=>$value){
            $username[] = $value['username'];
        }

        $size_n = count($username);

        $uname=array();

        for($j=$i; $j<$size_n; $j++){
            $uname[]=$username[$j];
        }
    }   
}

该代码有效,当我记录我的 $userid[$i] 和 $username[$j] 时,我得到了我想要的。

我的问题是:如何在我的控制器中返回 $username[$j] 的值(当我的循环结束时)以在我的视图中传递它(我想在 CGridView 中显示它)?如果我使用 return 它会停止我的循环,对吗?我可能对 MVC 有不好的使用吗?

谢谢!

4

2 回答 2

0

是的,实际上,这看起来不是很干净的 MVC :-) 我建议你做的是将所有逻辑包装到 Yii FormModel 中。您会发现它简化了检索信息以显示在表单上的方式,并使保存更容易(所有保存逻辑都在一个地方)。

FormModels 本质上可以处理多个 AR 模型并在它们之间轻松保存。

编辑:为了帮助改进您的代码,我建议开始进行单元测试/考虑如何测试此逻辑。您希望控制器中的逻辑相对较少,以便您的大多数应用程序逻辑都包含在您可以测试的模型中。

推荐阅读: http ://www.yiiframework.com/doc/guide/1.1/en/basics.best-practices

http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ - Ruby on Rails,但它有很好的建议可以应用于 Yii

于 2013-11-14T04:37:54.243 回答
0

要将值传递给“管理员”视图,请将用户名存储在 $values 数组中。

然后通过 render 方法将其传递给视图。

$this->render('admin',array(
        'model'=>$model,
        'usernames' => $values
));

// admin view
// and in the 'admin' view file you can access it like this.
print_r($usernames);
于 2013-11-14T07:43:07.197 回答