【问题标题】:How to add own data to POST in YII2?如何在 YII2 中将自己的数据添加到 POST 中?
【发布时间】:2018-10-11 22:23:52
【问题描述】:

我对在表单之外添加一些数据并将其与表单数据一起发送有疑问。看!我有 3 个字段 ActiveForm:

名称(文本) 电子邮件(电子邮件) 当然(隐藏)

好的,但我需要再添加一个名为“status”的内容。我不想添加隐藏字段,只想添加内部控制器或模型。

怎么做?

控制器:

public function actionFree()
{
    $model = new SubscribeForm();

    $this->view->title = "ШКОЛА ПИСАТЕЛЬСКОГО МАСТЕРСТВА: Новичок курс";

    if ($post = $model->load(Yii::$app->request->post())) {
        if ($model->save()) {
            Yii::$app->session->setFlash('success', 'Данные приняты');
            return $this->refresh();
        }
        else {
            Yii::$app->session->setFlash('error', 'Ошибка');
        }
    }
    else {
        // страница отображается первый раз
        return $this->render('free-course', ['model' => $model, 'course_id' => 1]);
    }
}

型号:

class SubscribeForm extends ActiveRecord
{
    public $fio;
    public $email;
    public $course;
    public $status;

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

    public function rules()
    {
        return [
            // username and password are both required
            [['fio', 'email'], 'required'],
            [['email'], 'unique'],
            ['email', 'email'],
            ['email', 'safe']
        ];
    }
}

【问题讨论】:

  • 您已经在模型中声明了一个名为 status 的字段 .. 所以只需使用它 .. $model->status = 'your_status';

标签: ajax database forms activerecord yii2


【解决方案1】:

您可以在控制器中设置值,如下所示:

public function actionFree()
{
    $model = new SubscribeForm();
    $model->status = 'your-status-value';
    // ... the rest of your code

或者您可以在模型中添加一个默认值。这样,您仍然可以否决来自控制器或表单字段的值,但在没有提供任何其他内容时会获得此值。

public function rules()
{
    return [
        ['status', 'default', 'value' => 'your-default-status-value'],
        // .. other rules
    ];
}

【讨论】:

  • 谢谢,但我有错误。我对默认变量使用了第二种方法,但想发送 $course.看:内部控制器:$model = new SubscribeForm(); $模型->课程= 1; //... 内部模型:public $course = 0; public function rules() { return [ //... ['course', 'default', 'value' => $this->course], ];正在执行的 SQL 是:INSERT INTO users (fio, email, status) VALUES ('ASDASDA.', 'email@yandex.ru1', 1)。与课程无关,为什么?
  • 您确定表中存在course 列吗?否则它肯定不会出现在 SQL 中。此外,为列创建变量也没有意义。这就是 ActiveRecord 在后台已经为您所做的。所以你不需要public 变量。并且课程值的规则也没有意义,因为您将其设置为它已有的值。
  • 我在用户中有“课程”列。我不想从表单发送课程价值。我想把它放在后面。但我有这个错误。 SQLSTATE[23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(***.users,CONSTRAINT users_ibfk_2 FOREIGN KEY (course) REFERENCES courses (@987654334 @) ON DELETE CASCADE ON UPDATE CASCADE)
  • 听起来您尝试保存在课程列中的值在课程表中尚不存在。如果要将值 1 保存到 course 列,则首先应在课程表中存在一条 id 为 1 的记录。
  • 好的,让我们尝试不使用索引...看,我有规则:public $status, $course; [['fio', 'email'], 'required'], ['email', 'email'], [['status', 'course'], 'safe'], 内部控制器:$model = new SubscribeForm(); $model->course = '2'; $model->status = '3'; if($model->load(Yii::$app->request->post())) { if ($model->save()) { 在 db 中:FIO 和 EMAIL 是值,但状态和过程 - 不是。为什么?状态和课程 - INT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
相关资源
最近更新 更多