@shevchenko__k
Помогаю новорожденным web программистам

Как сделать много-вложенный табличный ввод в Yii во create?

Помогите пожалуйста с проблемой. Не могу решить. Точнее решил на половину.
Мне надо сделать блок с этапами и подэтапами.
Вот как это все выглядит во view.
5b7a9ef40956d524288441.png
Понятно что этапов может быть много с пунктами и так же есть еще в них неограниченное количество может быть подэтапов.
проблема в том что в при создании создаются только этапы. с ними я разобрался а вот этапы не желают загружаться в модель.
вот код view этапов и подэтапов
<?= \unclead\multipleinput\TabularInput::widget([
    'models'=>$model,
    'addButtonPosition'=>\unclead\multipleinput\MultipleInput::POS_FOOTER,
    'rendererClass' => \unclead\multipleinput\renderers\ListRenderer::className(),
    'addButtonOptions'=>['class'=>'ag_2_1', 'label'=>'Добавить этап'],
    'layoutConfig'=>['offsetClass'=>'','labelClass'=>'','wrapperClass'=>'', 'errorClass'=>''],
    'columns' => [
        [
            'name'=>'title',
            'options'=>[
                'class'=>'input_goal'
            ]
        ],
        [
            'name'=>'description',
            'type'=>'textarea',
            'options'=>[
                'class'=>'input_goal'
            ]
        ],
        [
            'name'=>'date_finish_stage',
            'type'=>\kartik\date\DatePicker::className(),
            'options'=>[

            ]
        ],
        [
            'name'=>'Substages',
            'type'=>\unclead\multipleinput\MultipleInput::className(),
            'options'=>[
                'columns'=>[
                    [
                        'name'=>'text',
                        'type'=>\unclead\multipleinput\MultipleInputColumn::TYPE_TEXT_INPUT
                    ]
                ]
            ]
        ],
    ]
])
?>

вот сам actionCreate. Не смотрите на тупой код. просто надо подсказать что мне надо сделать что бы занеслись подэтапы в модель.
public function actionCreate()
    {
        $model = new Goals;
        $Stages = [new Stage()];
		$criterias = CriteriesGoals::find()->all();
        $Substages = [[new Substage]];
        if ($model->load(Yii::$app->request->post())) {
			$model->id_user = Yii::$app->user->id;
			$model->status = self::ACTIVEGOAL;
			$model->doc = UploadedFile::getInstance($model, 'doc');
			
			if ($model->doc) {
				if($model->upload())
				{
					$model->doc = $model->doc->name;
				}
			}

            $Substages[] = new Substage;
            Model::loadMultiple($Substages, Yii::$app->request->post('Stage'));
            print_r(Yii::$app->request->post('Stage'));
			die();
			if($model->save())
			{
                $items = Yii::$app->request->post('Stage',[]);
                for($i = 0; $i<count($items); $i++){
                    $Stages[$i] = new Stage();
                }
				if(Model::loadMultiple($Stages, Yii::$app->request->post()) && Model::validateMultiple($Stages))
				{

					foreach ($Stages as $key=>$Stage) {
						$Stage->id_user = Yii::$app->user->id;
						$Stage->goal_id = $model->id;

						$Stage->save(false);
                        /*$Substages[$key] = new Substage();
                        Model::loadMultiple($Substages, Yii::$app->request->post('Stage')['Stage'][$key],'Substages');
                        foreach($Substages as $key2=>$substage){
                            //$substage->text = Yii::$app->user->id;
                            $substage->id_user = Yii::$app->user->id;
                            $substage->id_stage = $Stage->id;

                            //$substage->save(false);
                        }
                        print_r($Substages);*/


                        /*if(Model::loadMultiple($Substages, Yii::$app->request->post('Stage')[$key]['Substage']) && Model::validateMultiple($Substages))
                        {
                            foreach($Substages as $substage){
                                $substage->id_user = Yii::$app->user->id;
                                $substage->id_stage = $Stage->id;
                                $substage->save(false);
                            }
                        }*/
					}
                    //die();
				}

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

        return $this->render('create', [
            'model' => $model,
            'criterias' => $criterias,
            'stages' => $Stages,
            'Substages' => $Substages,
        ]);
    }

И для вашего удобства если вам это поможет распечатанный POST
Array
(
    [_csrf] =&gt; J8d1xixQoLbb9BY6JzaHID5kNymEfY6mupCWXTDz4IlN8kCiZTPMx_a5IlRzTvRuUQ5AU80l3PXgx88aAaKs8A==
    [Goals] =&gt; Array
        (
            [goal] =&gt; купить дом
            [date_finish_goal] =&gt; 2018-09-06
            [criterion_fifnish_goal] =&gt; купленный дом
            [need_goal] =&gt; жить в своем дома
            [category_goal] =&gt; 
            [priority_goal] =&gt; 1
            [is_public] =&gt; 0
            [newPicture] =&gt; 
        )

    [date_finish_goal-goals-date_finish_goal-disp] =&gt; 6 Сентябрь 2018
    [Stage] =&gt; Array
        (
            [0] =&gt; Array
                (
                    [title] =&gt; wwwww
                    [description] =&gt; frgregrg
                    [date_finish_stage] =&gt; 20.08.2018
                )

            [Substages] =&gt; Array
                (
                    [text] =&gt; Array
                        (
                            [0] =&gt; gregregfrfg
                            [1] =&gt; gregregrgr
                        )

                )

        )

)

Пожалуйста подскажите мне что мне сделать что бы заносились в базу и этапы и связанные с ними подэтапы.
  • Вопрос задан
  • 316 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
А Вас не смущает то что в строке
print_r(Yii::$app->request->post('Stage'));
 die();

Вы прерываете выполнение скрипта?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы