Yii2 multiple forms in a single action

后端 未结 1 1380
[愿得一人]
[愿得一人] 2020-12-15 14:06

Which is the right way to handle multiple forms in a single action?

Here is my models/MembersBans.php



        
相关标签:
1条回答
  • 2020-12-15 14:50

    Id in ActiveForm does't mean id in $_POST. You should use:

    $membersBans->load(Yii::$app->request->post())

    or

    $membersBans->load(Yii::$app->request->post('MembersBans'))

    for load attributes from form.

    For example multiple forms from CeBe (http://www.yiiframework.com/forum/index.php/topic/53935-solved-subforms/page__p__248184#entry248184)

    public function actionCreate()
    {   
        $user = new User;
        $profile = new Profile;
    
        if ($user->load(Yii::$app->request->post()) && $profile->load(Yii::$app->request->post()) && Model::validateMultiple([$user, $profile])) {
    
            $user->save(false); // skip validation as model is already validated
            $profile->user_id = $user->id; // no need for validation rule on user_id as you set it yourself
            $profile-save(false); 
    
            return $this->redirect(['view', 'id' => $user->id]);
        } else {
            return $this->render('create', [
                'user' => $user,
                'profile' => $profile,
            ]);
        }
    }
    

    In your action you use one model. I think you should extends MembersBans to MembersBansIp class. And your action:

    public function actionList() {
        $membersBans = new MembersBans();
        $membersBansIp = new MembersBansIp();
        if ($membersBans->load(Yii::$app->request->post())) {
            $membersBans->banMember();
        }
        if ($membersBansIp->load(Yii::$app->request->post())) {
            $membersBansIp->banIp();
        }
        return $this->render('list', [
                    'membersBans' => $membersBans,
                    'membersBansIp' => $membersBansIp,
        ]);
    }
    

    In view:

    <?php
        $activeForm = ActiveForm::begin([
                'id' => 'banMember',
    ])
    ?>
    
        <?= $activeForm->field($membersBans, 'fieldMembersBans') ?>
        <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
        <?php ActiveForm::end() ?>
    <?php
        $activeForm = ActiveForm::begin([
                'id' => 'banMemberIp',
    ])
    ?>
    
        <?= $activeForm->field($membersBansIp, 'usernameMembersBansIp') ?>
        <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
        <?php ActiveForm::end() ?>
    

    EDIT

    I put your code. He is work. https://yadi.sk/i/y7PkwGUPekjPD https://yadi.sk/i/h8dCYQz3ekk2B

    But I change controller to this

    $membersBans = new MembersBans();
            if ($membersBans->load(Yii::$app->request->post())) {
                $membersBans->banMember();
            }
            if ($membersBans->load(Yii::$app->request->post())) {
                $membersBans->banIp();
            }
    

    And in model change Members to User, because I have not Members objects:

    $memberInfo = User::findByUsername($this->username);
            if ($memberInfo) {
                $this->ban_memberid = $memberInfo->id;
    

    Resume: your code is worked. Change controller, how I written up.

    0 讨论(0)
提交回复
热议问题