Отправка нескольких значений кнопки отправки в контроллер с ошибкой

Я искал решение в течение последних нескольких дней, но я не мог найти правильное решение, включая публикацию его в stackoverflow до Отправка значения кнопки в контроллер, но не удалось опубликовать значение, но я решил отправить его снова, потому что проблема изменилась, так как я уже знаю ошибку .

Я хочу отправить несколько кнопок отправки на контроллер в yii2, сначала я могу получить значение кнопки отправки из $_POST['chosen'] в контроллере, если код выглядит так (ниже):

    <?php $form =ActiveForm::begin() ?>


        <hr>
        <div class="row">
            <div style="float:left" >
                <?= Html::submitButton('Add Row', [ 'name' => 'chosen', 'value'  =>  'addmore', 'class' => 'btn btn-info']) ?>
            </div>
            <div style="float:right" >
                <?= Html::submitButton('Next Page', ['class' => 'btn btn-primary', 'name' => 'chosen', 'value' =>  'nextpage']) ?>
            </div>
        </div>

    <?php ActiveForm::end()?>

но когда я добавляю свою функцию для создания div, я больше не могу получить $_POST['chosen'] , но я все еще могу получить объект $model в контроллере. функция (addRelationForm) используется для динамического создания объекта div, поэтому я могу передать контроллеру неопределенный размер массива. я мог бы динамически добавить div, нажав кнопку добавления строки.

<?php
    use kartik\widgets\RangeInput;
    use yii\app\clientScript;
    use yii\bootstrap\ActiveForm;
    use yii\helpers\Html;
    use frontend\models\relation;

    $this->registerJsFile('http://code.jquery.com/jquery-2.1.4.min.js');

    function addRelationForm($form, $item, $i){



        return '<div class="col-md-12" id=\'r_'.($i).'\'>
        <div class="form-group col-md-12">
            <label> Friend ' . ($i + 1) . '</label>'.
         $form->field($item, "[$i]user_friend_id") .
       '<label> Closeness to you </label>

        <div class="form-inline">   ' .

            $form->field($item, "[$i]closeness")->widget(RangeInput::classname(), [
                'options' => ['placeholder' => 'Rate (1 - 5)...'],
                'html5Options' => [
                    'min' => 1, 'max' => 5,
                    'width' => '75%',
                    'addon' => ['append' => ['content' => '<i class="glyphicon glyphicon-star"></i>']]
                ]])->label(false).
        '</div> '.
        '<div class="form-inline" >
                I know this person as a friend for approximately (in year) '.
                $form->field($item, "[$i]known_for")->textInput(["type" => "number", "placeholder" => '(in year)'])->label(false).
        '</div></div></div>';

    }


?>


    <h1>Friendship Survey</h1>

    <p> Introverted the space below, list up to ten of your closest friends that are currently in Econs/ Math and Econs; a minimum of 5 is compulsory. *Please select their full names from the dropdown list provided. Also, please select on the scale how close you are to each friend. 1Note the incentives for this section </p>


    <?php $form =ActiveForm::begin() ?>

        <?php foreach ($items as $i => $item) { 
                echo addRelationForm($form ,$item, $i);
            } 
        ?>


        <hr>
        <div class="row">
            <div style="float:left" >
                <?= Html::submitButton('Add Row', [ 'name' => 'chosen', 'value'  =>  'addmore', 'class' => 'btn btn-info']) ?>
            </div>
            <div style="float:right" >
                <?= Html::submitButton('Next Page', ['class' => 'btn btn-primary', 'name' => 'chosen', 'value' =>  'nextpage']) ?>
            </div>
        </div>

    <?php ActiveForm::end()?>

<?php
    $this->registerJsFile('/advanced/frontend/web/js/partone-two.js');
?>

мой контроллер выглядит так:

public function actionTwo(){ 
        if(\Yii::$app->user->isGuest){ 
            $this->goHome();
        } 
        $models = []; 

        var_dump($_POST);

        Yii::trace("esting" .empty($_POST['chosen']));

        for($i = 0; $i < 5 ; $i++){ 
                $models[$i] = new RelationForm(); 
        }


        if(!empty($_POST['add'])){                
            if('addmore' == $_POST['add']){
                Model::loadMultiple($models, Yii::$app->request->post('items'));
                $model = new RelationForm();
                array_push($models, $model);
                return $this->render('two', ['items' => $models]);    
            }
        }



        if (Model::loadMultiple($models, Yii::$app->request->post()) ) 
        { 
            $count = 0; 
            for($i = 0 ; $i < count($models); $i++){ 
                if(!$models[$i]->validate()){
                    if($models[$i]->hasErrors()){
                        Yii::trace( Html::errorSummary($models[$i]  ));
                    }  

                    return $this->render('two', ['items' => $models]);     
                }
            }

            for($i = 0 ; $i < count($models); $i++){ 
                if(!$models[$i]->store()){
                     return $this->render('two', ['items' => $models]);     
                }
            }

            Yii::$app->session->setFlash('success', "Processed {$count} records successfully."); 
            return $this->redirect('three', ['items' => $models]);// redirect to your next desired page 
        }
        else {                 
            Yii::trace("Render");
            return $this->render('two', array('items' => $models)); 
        } 
        return null; 
}

person Robert Limanto    schedule 13.12.2015    source источник
comment
я проверяю из var_dump($_POST), он должен быть внутри дерева, которое я также тестировал раньше   -  person Robert Limanto    schedule 13.12.2015
comment
Если вы загружаете свой div через ajax, вам нужно убедиться, что вы используете .on в своем jquery, иначе это не сработает. api.jquery.com/on   -  person Coz    schedule 14.12.2015
comment
Я не могу получить имя. Не могли бы вы посмотреть мой вопрос, связанный с ним?   -  person Moeez    schedule 06.04.2021


Ответы (1)


Вместо <?= Html::submitButton('Add Row', [ 'name' => 'chosen', 'value' => 'addmore', 'class' => 'btn btn-info']) ?>, которые создают <button type="submit" ... >Submit</button>, используйте submitInput($label = 'Submit', $options = []), которые создают <input type="submit" name="chosen" value="addmore" class="btn btn-info">.

Затем в контроллере: $var = \Yii::$app->request->post('chosen'); вы можете проверить, пуста ли переменная: empty($var) (разные имена для каждого submitInput без значений) или isset && $var === 'your_value' (то же имя, но разное значение в submitInput - не проверено, работает ли оно)

person Pistej    schedule 14.12.2015
comment
Я не могу получить имя. Не могли бы вы посмотреть мой вопрос, связанный с ним? - person Moeez; 06.04.2021