我使用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);