Why i getting an error “Call to a member function

2019-09-09 13:52发布

问题:

i try to save multilanguaged content My About model

...
public function rules() {
    return [
        [['status', 'date_update', 'date_create'], 'integer'],
        [['date_update', 'date_create'], 'required'],
    ];
}

...

public function getContent($lang_id = null) {
    $lang_id = ($lang_id === null) ? Lang::getCurrent()->id : $lang_id;

    return $this->hasOne(AboutLang::className(), ['post_id' => 'id'])->where('lang_id = :lang_id', [':lang_id' => $lang_id]);
}

My AboutLang model

 public function rules()
{
    return [
        [['post_id', 'lang_id', 'title', 'content'], 'required'],
        [['post_id', 'lang_id'], 'integer'],
        [['title', 'content'], 'string'],
    ];
}

My About controller

    public function actionCreate()
{
    $model = new About();
    $aboutLang = new AboutLang();
    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('create', [
            'model' => $model,'aboutLang'=>$aboutLang]);
    }
}

and my view (create form)

 ...
<?= $form->field($model, 'status')->textInput() ?>

<?= $form->field($aboutLang, 'title')->textInput() ?>

<?= $form->field($aboutLang, 'content')->textInput() ?>
enter code here

And when i put $aboutLang in create form i get an error "Call to a member function formName() on a non-object"

回答1:

It looks like the views you are using were generated by Gii. In that case, Gii generates a partial view for the form (_form.php) and two views both for create and update actions (create.php and update.php). These two views perform a rendering of the partial view.

The problem you might have is that you are not passing the variable $aboutLang from create.php to _form.php, that must be done in create.php, when you call renderPartial():

$this->renderPartial("_form", array(
    "model" => $model, 
    "aboutLang" => $aboutLang, //Add this line
));

Hope it helps.



回答2:

Check your $aboutLang type. It looks like it is null.

if ($aboutLang) {
echo $form->field($aboutLang, 'title')->textInput();
echo $form->field($aboutLang, 'content')->textInput();
}


标签: yii yii2