【问题标题】:Yii2: Submit validation of form with two instances of same modelYii2:使用相同模型的两个实例提交表单验证
【发布时间】:2015-07-04 13:15:53
【问题描述】:

跟进:Yii2: Validation in form with two instances of same model

我有一个模型 Booking,其中包含模型地址 shipping_address 和 billing_address 字段。我现在想将它们打印成基本上工作得很好的相同形式。验证在用数据填充字段时起作用,但在提交表单时失败。

在控制器中,使用现有地址模型的字段设置帐单地址,并使用新地址模型设置送货地址:

 public function actionCreate()
{

    $model = new Donation();

    if (!empty($_POST['Address'])) {

        //TODO: Save models

        return $this->redirect(['view', 'id' => $model->id]);

    } else {

        $user = User::find(Yii::$app->user->identity->id)->one();
        $billing_address = $user->getBillingAddress()->one();

        return $this->render('create', [
            'model' => $model,
            'billing_address' => $billing_address,
            'shipping_address' => new Address()
        ]);
    }
}

以下代码显示了字段的打印方式。

帐单字段:

<?= $form->field(
        $billing_address,
        'address_line_1',
        [
            'selectors' => [
                'input' => '#billing-address_line_1',
                'error' => '#billing-address_line_1',
                'container' => '.billing-address_line_1'
            ],
            'options' =>
                ['class' => 'billing-address_line_1']
        ])->textInput([
            'maxlength' => 45,
            'name'=> 'Billing_Address[address_line1]',
            'id'=>'billing-address_line_1',
    ]); ?>

运输字段:

<?= $form->field(
        $shipping_address,
        'address_line_1',
        [
            'selectors' => [
                'input' => '#shipping-address_line_1',
                'error' => '#shipping-address_line_1',
                'container' => '.shipping-address_line_1'
            ],
            'options' =>
                ['class' => 'shipping-address_line_1']
        ])->textInput([
                'maxlength' => 45,
                'name'=> 'Shipping_Address[address_line1]',
                'id'=>'shipping-address_line_1',
    ]); ?>

如以下屏幕截图所示,验证在填写表单时起作用:

现在的问题 - 当我单击创建按钮时它不起作用:

关于我如何解决这个问题的任何想法?填写验证和点击按钮验证有什么区别?

【问题讨论】:

  • 请出示控制器代码
  • 我添加了控制器代码,感谢您的帮助!
  • 抱歉这个问题,但据我了解,您希望将两个地址都保存在数据库中。对吗?
  • 请显示您的控制器的所有创建操作。我只看到了一部分。
  • 我更新了代码,但实际上并没有什么可看的。当我单击创建按钮时,我没有再次访问控制器,它在 ajax 验证时失败,没有完成请求。

标签: php forms validation activerecord yii2


【解决方案1】:

我会这样做,我不会直接在渲染函数中创建第二个地址,而是会创建第一个模型,然后传递给函数。

 } else {

      $user = User::find(Yii::$app->user->identity->id)->one();
      $billing_address = $user->getBillingAddress()->one();
      $shipping_address = new Address();


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

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多