3

「Yii と PHP 2nd Edition を使用した Web アプリケーション開発」の書籍の例に従うときに発生する問題の解決策を探しています。私が(タイトルから)得たエラーは、本にあるすべてのものから判断すると、表示されるはずがありません。これが私がやろうとしていることです。Project.php モデルで、Yii の CHtml ヘルパーを使用して、CActiveForm の Yii の dropDownList() メソッド (ビュー ファイルで使用) で使用する「受け入れ可能な」配列を作成するメソッドを定義しました。こんな感じ

public function getUserOptions() {
    // $this->users refers to the defined relationship of this class
    $usersArray = CHtml::listData($this->users, 'id', 'username');
    return $usersArray;
} 

リレーションシップは、同じクラスの Relations() メソッドで定義されます

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() を使用してユーザーにドロップダウン リストを提供し、Yiis の dropDownList() メソッドを使用してキー => 値のペアでオプションを生成する方法は次のとおりです。_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 は 2 つのドロップダウンの最初にヒットするまでレンダリングし、その後このエラーを受け取ります:

致命的なエラー: 44 行目の E:\Programi\XAMP\htdocs\trackbar\protected\views\issue_form.php の非オブジェクトに対するメンバー関数 getUserOptions() の呼び出し

どんな助けでも大歓迎です:)ところで、本では、すべてがうまくいくはずだと示しています...

編集: 参照用に、この _form.php ビューを呼び出してレンダリングする IssueController.php の actionCreate() メソッドを次に示します。

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,
    ));
}
4

1 に答える 1