自定义联系表单不起作用Yii2

时间:2017-04-02 09:28:57

标签: php yii2

我尝试将默认联系表单重做为发送邮件并将其保存到数据库表的表单。但是出了点问题,我无法理解为什么。我已经做了相同的注册表而没有问题,而且工作正常。你们能帮我一步吗?我的错误在哪里?

ContactForm模型:

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use yii\db\ActiveRecord;

/**
 * This is the model class for table 'users_messages'.
 *
 * @params int $message_id
 * @params string $message_title
 * @params string $message_content
 * @params string $message_author
 * @params int $user_id
 */
class ContactForm extends ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'users_messages';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['message_title', 'message_content', 'message_author'], 'required']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
           'message_title' => 'Title',
           'message_author' => 'Author',
           'message_content' => 'Content'
        ];
    }
}

actionContact:

/**
     * Displays contact page.
     *
     * @return string
     */
    public function actionContact()
    {
        $model = new ContactForm();
        $message = new UsersMessages();

        if(isset($_POST['send_message']))
        {
            $model->attributes = $_POST['ContactForm'];

            if($model->validate())
            {
                $message->message_author = $model->message_author;
                $message->message_title = $model->message_title;
                $message->message_content = $model->message_content;

                $message->save();

                return $this->refresh();
            }
        }

        return $this->render('contact', [
            'model' => $model,
        ]);
    }

当我调试actionContact时,它向我显示$ model-&gt; message_author,title和content中没有数据。

提前谢谢!

编辑:根据Brizkey的建议,我已达到这一点: actionContact:

public function actionContact()
    {
        $model = new UsersMessages();

        if($model->load($_POST) && $model->save())
        {
            return $this->redirect('contact');
        }

        return $this->render('contact', [
            'model' => $model,
        ]);
    }

并且只留下一个型号: UserMessages模型:

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "users_messages".
 *
 * @property int $message_id
 * @property string $message_title
 * @property string $message_content
 * @property string $message_author
 * @property int $user_id
 *
 * @property Users $user
 */
class UsersMessages extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'users_messages';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['message_title', 'message_content', 'message_author', 'user_id'], 'required'],
            [['message_content'], 'string'],
            [['user_id'], 'integer'],
            [['message_title'], 'string', 'max' => 100],
            [['message_author'], 'string', 'max' => 50],
            [['user_id'], 'exist', 'skipOnError' => true, 'targetClass' => Users::className(), 'targetAttribute' => ['user_id' => 'id']],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'message_id' => 'Message ID',
            'message_title' => 'Title:',
            'message_content' => 'Content:',
            'message_author' => 'Author:',
            'user_id' => 'User ID',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getUser()
    {
        return $this->hasOne(Users::className(), ['id' => 'user_id']);
    }
}

问题出在$model->save()部分。它无法通过它!

EDIT-2 :我取得了一些成功(如果我可以这样称呼的话)!给出save()的{​​{1}}方法参数。这一行动的结果是: false

从这个错误我明白问题在于foreign_key。所以我删除了它,所有流量现在都很好! (我删除它是因为我意识到在我的情况下我不需要它)

1 个答案:

答案 0 :(得分:3)

这里有一些事情需要纠正/解释。

  1. 有一个名为ContactForm的模型,它是users_messages表的活动记录。那么UsersMessages模型是什么以及它做了什么?
  2. 如果我猜对了,这两个模型正在做同样的事情,只需从ContactForm删除一个至少延伸UsersMessages
  3. 方法load()将负责检查$ _POST是否填充了数据,并且它将验证数据是否可以验证,因此只能分配具有验证规则的属性 - 使用它而不是直接使用POST数据分配属性。
  4. 只有一个模型负责处理来自表单的数据,您不必再手动分配属性,而是在这里做 - 更安全,更少出错。
  5. 我在Stack Overflow上已经看到了很多 - 你们不要检查save()是否成功 - 为什么?这可能会出错,不要&#39 ; t永远假设它总是true
  6. 在不知道这个其他模型的情况下,我无法确定这里发生了什么。也许$message的验证出错了。你需要先检查一下。

    希望通过以上所有要点,你可以解决它。