我尝试将默认联系表单重做为发送邮件并将其保存到数据库表的表单。但是出了点问题,我无法理解为什么。我已经做了相同的注册表而没有问题,而且工作正常。你们能帮我一步吗?我的错误在哪里?
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。所以我删除了它,所有流量现在都很好! (我删除它是因为我意识到在我的情况下我不需要它)
答案 0 :(得分:3)
这里有一些事情需要纠正/解释。
ContactForm
的模型,它是users_messages
表的活动记录。那么UsersMessages
模型是什么以及它做了什么?ContactForm
删除一个至少延伸UsersMessages
。save()
是否成功 - 为什么?这可能会出错,不要&#39 ; t永远假设它总是true
。在不知道这个其他模型的情况下,我无法确定这里发生了什么。也许$message
的验证出错了。你需要先检查一下。
希望通过以上所有要点,你可以解决它。