在一个视图中创建两个窗体


create two forms in one view

我使用了CRUD并创建了两个模型。我尝试在一个视图中创建两个窗体。因此,在我的控制器中,我创建了新模型,并写了一个检查,如果填写了一个表单来记录它,如果两个表单保存两个。但它对我不起作用。这是我的控制器操作创建:

public function actionCreate()
{
    $model = new UrUserForm();
    $userDate= new UserDataForm();
    $model->scenario = 'create';
     if ($model->load(Yii::$app->request->post())) {
        try {
            $model->saveUser();
        } catch (Exception $ex) {
            Yii::$app->session->setFlash('error', Yii::t('app', 'Dane nie zostały zapisane.'));
        }
        return $this->redirect(['index']);
    } elseif(($userDate->load(Yii::$app->request->post()) && $model->load(Yii::$app->request->post()))){
        try {
            var_dump( $model->saveUser(), $userDate->saveOptionalData());
            exit();
            $model->saveUser();
            $userDate->saveOptionalData();
        } catch (Exception $ex) {
            Yii::$app->session->setFlash('error', Yii::t('app', 'Dane nie zostały zapisane.'));
        }

} else {
        return $this->render('create', [
            'model' => $model,
            'userDate'=> $userDate
        ]);
}}

当我填写两个表单时,此var_dump不会显示。所以我认为我在这个控制器中做错了一些。也许我肯定会向你展示我的模型表格

<?php
namespace backend'modules'users'models;
use common'models'User;
use backend'modules'users'models'UrUser;
use yii'base'Model;
use Yii;
use yii'helpers'Url;
/**
 * Signup form
 */
class UrUserForm extends Model {
    public $Login;
    public $Email;
    public $Password;
    public $Sex;
    public $Country;
    public $Language;
    public $Category;
    public $AccoutType;
    public $Name;
    public $Surname;
    public $BirthDate;
    public $RulesAccept;
    public $user;
    /**
     * @inheritdoc
     */
    public function rules() {
        return [
            [['Country', 'Language', 'Category'], 'safe'],
            ['Login', 'filter', 'filter' => 'trim'],
            [['Login', 'Sex', 'Name', 'Surname', 'BirthDate'], 'required'],
            ['Login', 'unique', 'targetClass' => ''common'models'User', 'message' => Yii::t('app', 'Pdany login jest już używany')],
            ['Login', 'string', 'min' => 2, 'max' => 255],
            ['Email', 'filter', 'filter' => 'trim'],
            ['Email', 'required'],
            ['Email', 'email'],
            ['BirthDate', 'ageValidator'],
            ['Email', 'string', 'max' => 255],
            ['Email', 'unique', 'targetClass' => ''common'models'User', 'message' => Yii::t('app', 'Podany e-mail jest już używany')],
            ['Password', 'string', 'min' => 6],
            ['Password', 'required','on' => 'create'],
        ];
    }
    public function saveUser() {
        $user = new UrUser();
        $user->Login = $this->Login;
        $user->Email = $this->Email;
        $user->RulesAccept = 1;
        $user->Rel_Sex = $this->Sex;
        $user->Name = $this->Name;
        $user->BirthDate = $this->BirthDate;
        $user->Surname = $this->Surname;
        $user->setPassword($this->Password);
        $user->generateAuthKey();
        $user->Rel_Country = $this->Country;
        $user->Rel_UserCategory = $this->Category;
        $user->Rel_Language = $this->Language;
        $user->status = 10;
        $this->user = $user;
        $user->created_at=time();
        if ($this->validate() && $user->validate()) {
            $user->save();
            return $user;
        }
        return false;
    }
    public function updateUser() {
        $this->user->load($this->toArray(), '');
        $this->user->Rel_Country=$this->Country;
        $this->user->Rel_Language=$this->Language;
        $this->user->Rel_UserCategory=$this->Category;
        $this->user->Rel_Sex=$this->Sex;
        $this->user->updated_at=time();
        if (!empty($this->Password)) {
            $this->user->setPassword($this->Password);
        }
        return $this->user->save();
    }

第二种模式:

<?php
namespace backend'modules'users'models;
use common'models'UserData;
use frontend'modules'settings'models'Profile;
use yii'base'Model;
use Yii;
/**
 * Signup form
 */
class UserDataForm extends Model
{
    public $Address;
    public $NIP;
    public $CompanyName;
    public $Website;
    public $Phone;
    public $IsCompany;
    public $IsPhoneConfirmed;
    public $CreatedAt;
    public $UpdateAt;
    public $Rel_State;
    public $Rel_Currency;
    public $IsDeleted;
    public $Id;
    /**
     * @inheritdoc
     */

    public function rules()
    {
        return [
            [['Address', 'Phone', 'Rel_State', 'Rel_Currency'], 'required'],
            [['NIP','Id', 'Phone', 'IsCompany', 'IsPhoneConfirmed', 'CreatedAt', 'UpdateAt', 'Rel_State', 'Rel_Currency', 'IsDeleted'], 'integer'],
            [['Address', 'CompanyName', 'Website'], 'string', 'max' => 45]
        ];
    }

     public function saveOptionalData() {
        $model = new UserData();
        //$user= 
        $model->Address=$this->Address;
        $model->Phone=$this->Phone;
        $model->Rel_State=$this->Rel_State;
        $model->Rel_Currency= $this->Rel_Currency;
        $model->NIP=$this->NIP;
        $model->IsCompany = $this->IsCompany;
        $model->IsPhoneConfirmed = $this->IsPhoneConfirmed;
        $model->CompanyName = $this->CompanyName;
        $model->Website = $this->Website;
        if ($this->validate() && $model->validate()) {
            //$user->Rel_RoyalUserData=$model->Id;
            $model->save();
            return $model;
        }
        return false;
    }

有人可以帮助我吗?我在 Yii 中新手,但我试图在文档中寻找答案,但我失败了。

任何时候只能提交一份表格。每个 HTML 表单标记都有自己的操作,即使它们可以指向相同的操作 URL,一次只能提交一个。如果要在一个 POST 操作中处理所有输入,则必须以相同的格式放置它们。