我正在寻找一个解决方案,以解决我在学习"使用Yii和PHP开发Web应用程序第二版"书籍中遇到的问题。从书中的所有内容来看,我(从标题中)得到的错误不应该出现。好吧,这就是我要做的。在Project.php模型中,我定义了一个方法,该方法应该使用Yii的CHtml助手来创建一个"可接受"的数组,用于Yii的CActiveForm的dropDownList()方法(在视图文件中使用)。看起来像这个
public function getUserOptions() {
// $this->users refers to the defined relationship of this class
$usersArray = CHtml::listData($this->users, 'id', 'username');
return $usersArray;
}
这些关系是在同一类的relationships()方法中定义的
public function relations() {
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'issues' => array(self::HAS_MANY, 'Issue', 'project_id'),
'users' => array(self::MANY_MANY, 'User', 'tbl_project_
user_assignment(project_id, user_id)'),
);
}
以及我想如何使用getUserOptions()为用户提供一个下拉列表,以使用YiisdropDownList()方法生成key=>值对中的选项,如下所示。_form.php是IssueControler.php控制器的视图文件,应该生成下拉列表的代码部分的代码如下:
<div class="row">
<?php echo $form->labelEx($model,'owner_id'); ?>
<?php echo $form->dropDownList($model,'owner_id', $model->project- >getUserOptions()); ?>
<?php echo $form->error($model,'owner_id'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'requester_id'); ?>
<?php echo $form->dropDownList($model,'requester_id', $model->project->getUserOptions()); ?>
<?php echo $form->error($model,'requester_id'); ?>
</div>
就像我说的,_form.php渲染直到它击中两个下拉菜单中的第一个,然后得到这个错误:
致命错误:在E:''Programi''XAMP''htdocs''trackbar''protect''views''issue_form.php的第44行对非对象调用成员函数getUserOptions()
任何帮助都将不胜感激:)顺便说一句,在书中它表明一切都应该工作。。。
编辑:这是IssueController.php的actionCreate()方法,它调用这个_form.php视图进行渲染,以供参考。
public function actionCreate() {
$model=new Issue;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Issue'])) {
$model->attributes=$_POST['Issue'];
$model->project_id = $this->_project->id;
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
您需要首先获取当前项目实例。然后基于该项目实例,您可以获得该特定项目的用户列表。添加此
public function getProject()
{
return $this->_project;
}
并将其用作.
<div class="row">
<?php echo $form->labelEx($model,'owner_id'); ?>
<?php echo $form->dropDownList($model,'owner_id', $model->getProject()- >getUserOptions()); ?>
<?php echo $form->error($model,'owner_id'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'requester_id'); ?>
<?php echo $form->dropDownList($model,'requester_id', $model->getProject()->getUserOptions()); ?>
<?php echo $form->error($model,'requester_id'); ?>
</div>
希望这将工作