从控制器模型 (php) 中的 for 循环中获取值


Get values from for loop in controller-model (php)

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

管理员控制器.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,
    ));
}

管理员模型.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 中显示它)?如果我使用退货,它会停止我的循环,对吧?我可能会错误地使用 MVC 吗?

谢谢!

是的,实际上,这看起来不像很干净的 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

要将值传递给"admin"视图,请将用户名存储在$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);