为什么我收到错误“在非对象上调用成员函数formName()”

时间:2016-04-05 15:04:25

标签: yii yii2

我尝试保存多语言内容 我的关于模型

...
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]);
}

我的AboutLang模型

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

我的关于控制器

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

和我的观点(创建表单)

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

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

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

当我在创建表单中放入$ aboutLang时,我得到一个错误“在非对象上调用成员函数formName()”

2 个答案:

答案 0 :(得分:1)

看起来您正在使用的视图是由Gii生成的。在这种情况下,Gii为表单(_form.php)生成部分视图,为创建和更新操作生成两个视图(create.php和update.php)。这两个视图执行局部视图的渲染。

您可能遇到的问题是,当您调用$aboutLang时,您没有将变量renderPartial()从create.php传递给_form.php,这必须在create.php中完成:

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

希望它有所帮助。

答案 1 :(得分:0)

检查你的$ aboutLang类型。 看起来它是空的。

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