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

时间:2013-11-14 02:12:28

标签: php for-loop yii

我使用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中显示它)?如果我使用返回它会停止我的循环,对吗? 我可能对MVC使用不好吗?

谢谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

要将值传递到“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);