Why i getting an error “Call to a member function formName() on a non-object”

安稳与你 提交于 2020-01-07 03:15:13

问题


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();
}


来源:https://stackoverflow.com/questions/36430141/why-i-getting-an-error-call-to-a-member-function-formname-on-a-non-object

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!