Сложная страница на yii2

107
08 мая 2021, 06:30

Вообщем такая проблема у меня есть страница на которой в модалке создается новый "магазин", также в другой модалке у любого из существующих "магазинов" можно изменить тариф и версию, и всё это повешено через pjax и создание срабатывает нормально, а вот обновление срабатывает, но ничего не изменяется, поэтому нужна помощь в данной проблеме. Вот код самой страницы:

<?php Pjax::begin(); ?>
    <div class="shops__block">
        <div class="shops__box s-di-vertical-m shops__box_pr40">
            <div class="shops__image">
                <?=Html::img('@web/images/shops-image.png', ['class' => 'shops__img']); ?>
                <div class="shops-count">
                    <p class="shops-count__number"><?=count($shops); ?></p>
                </div>
            </div>
        </div>
        <div class="shops__box s-di-vertical-m">
            <h3 class="shops__box-title">
                Ваши магазины
            </h3>
            <div class="add-something" data-jsx-modal-target="store">
                <div class="add-something__plus s-di-vertical-m"></div>
                    <p class="add-something__text add-something__text_fs14 s-di-vertical-m">добавить магазин</p>
                </div>
            </div>
        </div>
        <?php foreach ($shops as $shop): ?>
            <ul class="shops__list">
                <li class="shops__item-mobile">
                    <div class="shops__item-box s-di-vertical-m shops__item-title">версия</div>
                    <div class="shops__item-box shops__item-box-mobile s-di-vertical-m" data-jsx-modal-target="version-change">
                        <a href="#" class="shops__item-box-link shops__item-name">Light</a>
                    </div>
                </li>
                <li class="shops__item">
                    <div class="shops__item-box shops__item-title">Адрес</div>
                    <div class="shops__item-box shops__item-box_mw115 shops__item-title">версия</div>
                </li>
                <li class="shops__item shops__item_p2">
                    <div class="shops__item-box shops__item-name"><?=$shop['address']; ?></div>
                    <?php $id_modal_version = md5($shop['id'] . '_' . $shop['version']); 
                        $version = $shop['version']; ?>
                    <div class="shops__item-box  shops__item-box_mw115" data-jsx-modal-target="version-change_<?=$id_modal_version; ?>">
                        <a href="#" class="shops__item-box-link shops__item-name">
                            <?=Shops::getVersion($version); ?>
                        </a>
                     </div>
                 </li>
                 <li class="shops__item shops__item_pb12">
                     <div class="shops__item-box shops__item-box_df">
                         <div class="shops__item-icon">
                             <?=Html::img('@web/images/icon/icon-lifebuoy.svg'); ?>
                         </div>
                         <p class="shops__item-box-text">Техподдержка: </p>
                         <?php $id_modal_tariff = md5($shop['id'] . '_' . $shop['tariff']['id']);
                             $tariff_id = $shop['tariff']['id']; $shop_id = $shop['id']; ?>
                         <div class="shops__item-tariff" data-jsx-modal-target="tariff_<?=$id_modal_tariff; ?>">
                             <a href="#" class="shops__item-tariff-text">
                                 <?=$shop['tariff']['name']; ?> (<?=Yii::$app->formatter->asDecimal($shop['tariff']['cost'], 2); ?> руб/мес)
                             </a>
                             <a href="#" class="shops__item-tariff-icon">
                                 <?=Html::img('@web/images/icon/icon-list-arrow.svg'); ?>
                             </a>
                         </div>
                     </div>
                 </li>
                 <li class="shops__item">
                     <div class="add-something">
                         <div class="add-something__plus s-di-vertical-m"></div>
                             <p class="add-something__text s-di-vertical-m">добавить услугу</p>
                         </div>
                     </li>
                 </ul>
             <?php echo $this->render('modal/tariff', compact('modelShop', 'tariffs', 'id_modal_tariff', 'tariff_id', 'shop_id')); ?>
             <?php echo $this->render('modal/version-change', compact('version', 'id_modal_version')); ?>
         <?php endforeach; ?>
     <?php Pjax::end(); ?>

Так а теперь код в модалки в которой пытаюсь сделать смену тарифа:

<div class="jsx-modal" data-jsx-modal-id="tariff_<?=$id_modal_tariff; ?>">
    <div class="jsx-modal__block jsx-modal-popup jsx-modal-popup_tariff">
        <div class="close close-add-store jsx-modal__close"></div>
        <div class="tariff">
            <h3 class="popup__title popup__title-tariff">
                Выберите тариф для перехода
            </h3>
            <div class="tariff__wrapp js_tab-parent">
                <ul class="tariff__tab">
                    <?php foreach ($tariffs as $tariff): ?>
                        <?php if($tariff_id != $tariff['id']): ?>
                            <li class="tariff__tab-item js__tab-item" data-id="<?=$tariff['id']; ?>">
                                <div class="version-name">
                                    <h3 class="version-name__title version-name__title_tariff"><?=$tariff['name']; ?></h3>
                                    <p class="version-name__price version-name__price-tab"><?=Yii::$app->formatter->asDecimal($tariff['cost'], 2); ?> руб/мес</p>
                                </div>
                                <div class="tariff__show-hide js__show-hide">
                                    Что входит в тариф?
                                </div>
                            </li>
                        <?php endif; ?>
                    <?php endforeach; ?>
                </ul>
                <ul class="tariff__content">
                    <?php foreach ($tariffs as $tariff): ?>
                        <?php if($tariff_id != $tariff['id']): ?>
                            <li class="tariff__content-item js__content-item">
                                <div class="tariff__content-row">
                                    <?=$tariff['about']; ?>
                                </div>
                            </li>
                        <?php endif; ?>
                    <?php endforeach; ?>
                </ul>
                <?php $form1 = ActiveForm::begin(['options' => ['data' => ['pjax' => true]]]); ?>
                    <?= $form1->field($modelShop, 'id')->hiddenInput(['value' => $shop_id])->label(false); ?>
                    <?= $form1->field($modelShop, 'tariff_id')->hiddenInput(['value' => $tariff_id])->label(false); ?>
                    <?= Html::submitButton('Перейти', ['class' => 'button button_width-200px tariff__button']); ?>
                <?php ActiveForm::end(); ?>
            </div>
        </div>
    </div>
</div>

А теперь собственно код контроллера:

public function actionIndex() {
    $shops = Shops::find()->with('tariff')->where(['user_id' => Yii::$app->user->id])->asArray()->all();
    $tariffs = Tariff::find()->asArray()->all();
    $modelShop = new Shops();
    if ($modelShop->load(Yii::$app->request->post())) {
        if ($modelShop->id != '' && $modelShop->tariff_id != '') {
            $update = Shops::find()->where(['id' => $modelShop->id])->one();
            $update->tariff_id = $modelShop->tariff_id;
            $update->save();
        } else {
            $modelShop->save();
        }
        return $this->refresh();
    }
    return $this->render('index', compact('shops', 'modelShop', 'tariffs'));
}

UPD: Так нашел ошибку говорит что не могу принять атрибут id т.к. он небезопасный.

Answer 1

Кароче сделал всё просто поправил форму в модалке вот так:

<?php $form1 = ActiveForm::begin(['options' => ['data' => ['pjax' => true]], 'action' => Url::to(['/user/update-shop'])]); ?>
    <?= $form1->field($modelShop, 'id')->hiddenInput(['value' => $shop_id])->label(false); ?>
    <?= $form1->field($modelShop, 'tariff_id')->hiddenInput(['value' => $tariff_id])->label(false); ?>
    <?= Html::submitButton('Перейти', ['class' => 'button button_width-200px tariff__button']); ?>
<?php ActiveForm::end(); ?>

Ну и соответственно в контроллере создал нужный action:

/**
 * Просто action для обновления тарифа магазина
 *
 * @return \yii\web\Response
 */
public function actionUpdateShop() {
    $updateShop = Yii::$app->request->post();
    $shop = Shops::findOne($updateShop['Shops']['id']);
    $shop->tariff_id = $updateShop['Shops']['tariff_id'];
    $shop->save();
    return $this->redirect(['/user/index']);
}
READ ALSO
Динамические view в Ларавел

Динамические view в Ларавел

Подскажите как организовать логикуСайт на Ларавел 5

97
Скрипт не видит раннее подключенные модули

Скрипт не видит раннее подключенные модули

У меня есть файл configphp, где идет установка некоторых строковых констант (define), которые содержат в себе абсолютные пути к директориям файла,...

90
Получить индекс заголовка столбца

Получить индекс заголовка столбца

Всем доброго времени суток! Делаю одно задание и столкнулся с небольшой трудностьюУ меня есть некий csv файл с названиями столбцов - (За период;Учетный...

103
Почему нельзя удалять элементы из коллекции в цикле for-each?

Почему нельзя удалять элементы из коллекции в цикле for-each?

Почему нельзя удалять из коллекции в цикле for-each?

90