【问题标题】:Exception (Unknown Property) 'yii\base\UnknownPropertyException' with message 'Getting unknown property: app\models\User::repeat_password'异常(未知属性)“yii\base\UnknownPropertyException”,消息“获取未知属性:app\models\User::repeat_password”
【发布时间】:2023-04-10 13:59:01
【问题描述】:

我是 Yii 框架的新手。这是我在 stackoverflow 中针对相关框架的第一篇文章。我的问题是如何在视图页面中显示非模型输入字段。请检查我的控制器并查看代码。

控制器

public function actionRegister() {
    $model = new User();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        //Insert data code here...
        return $this->render('entry-confirm', ['model' => $model]);
    } else {
        return $this->render('entry', ['model' => $model]);
    }
}

视图(entry.php)

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin(); ?>

<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<?= $form->field($model, 'repeat_password')->passwordInput() ?>

<div class="form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

模型(User.php)

namespace app\models;

use Yii;
class User extends \yii\db\ActiveRecord {

    public static function tableName() {
        return 'user';
    }

    public function rules() {
        return [
            [['username', 'password', 'email'], 'required'],
            [['username', 'password', 'email'], 'string', 'max' => 128],
            ['email', 'email', 'message' => "The email isn't correct"],
            ['email', 'unique', 'message' => 'Email already exists!'],

            ['repeat_password', 'required'],
            [['repeat_password'], 'string', 'min'=>6, 'max'=>40],
            ['password', 'compare', 'compareAttribute'=>'repeat_password'],
        ];
    }

    public function attributeLabels() {
        return [
            'id' => 'ID',
            'username' => 'Username',
            'password' => 'Password',
            'email' => 'Email',
        ];
    }

}

输出

我的user 表中有 3 列。列是usernameemailpassword,但repeat_password 不在我的表格列中。这是一个非模型输入字段。所以我收到了上面的错误消息。请帮助我,让我知道如何解决它。

【问题讨论】:

  • 更新您的问题添加您的相关模型
  • @scaisEdge 我已经更新了我的问题。

标签: php forms yii2


【解决方案1】:

您必须将新的公共属性添加到User.php(模型类文件)

class User extends ActiveRecord
{
    public $repeat_password;

请先参考这里

http://www.yiiframework.com/doc-2.0/guide-structure-models.html http://www.yiiframework.com/doc-2.0/guide-start-forms.html

不会花太多时间。

不要忘记在User.phprules 方法中添加其验证规则 http://www.yiiframework.com/doc-2.0/guide-structure-models.html#safe-attributes

【讨论】:

  • 我认为这不是个好主意。该字段不必在数据库/模型中,所以
  • @AlexSlipknot 你的首选方式是什么?
  • 它可以只是一些后置变量。
  • 那你将如何验证它?
  • @SohelAhmedM 感谢您的回答。我只是添加public $repeat_password; 现在一切正常。
【解决方案2】:

问题与您使用的事实有关

  <?= $form->field($model, 'repeat_password') ?>

用户模型不存在..

您应该创建一个 FormModel(例如:带有此 repeat_password 字段的 UserInput )来管理正确的输入,然后在行动中正确管理来自您的 formModel/UserInput 模型和用于存储的用户模型的分配

要构建一个合适的表单模型类,您可以查看本指南http://www.yiiframework.com/doc-2.0/guide-start-forms.html

【讨论】:

  • 我不明白你的意思。你能解释一下你的答案吗?
  • @Chinmay235 确定 .. 消息错误是因为您在视图中使用的模型中没有字段名称 repeat_password (用户模型没有 repeat_password ).. 你可以使用专门用于管理这种情况的模型来解决此问题..您可以创建一个非基于 ActiveRecord 的 FormModel ..别名模型 ..而不是包含您需要的文件(用户字段和 msissing repeat_password )..然后您应该创建并通过以查看此 FormModel 并通过提交获取输入的结果 .. ,, 如果清楚..请告诉我..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多