我使用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使用不好吗?
谢谢!
答案 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);