Как вы обновляете внутреннюю форму после добавления отношения, используя отношение Render в OctoberCMS?

У меня есть 2 модели Booking и Attendee с отношением ко многим ко многим

У меня также есть сводная модель BookingAttendee - поэтому я могу использовать методы af terCreate, которые есть у них.

В бэкэнд-форме для бронирования, где я хочу добавить посетителей - я использую частичное для рендеринга отношения с <?= $this->relationRender('attendees') ?> и все работает нормально.

Бронирование имеет некоторые ценовые атрибуты, которые я хотел бы обновлять на странице каждый раз, когда посетитель добавляется или удаляется.

Существуют ли какие-либо методы для отношение Widget, которые происходят после создания отношения, которые позволили бы мне обновить div на странице?

Согласно документам, есть четыре метода, которые я могу использовать для расширения на RelationController

relationExtendViewWidget()
relationExtendManageWidget()
relationExtendPivotWidget()
relationExtendRefreshResults()

Проблема в том, что я не знаю, как использовать их для обновления содержимого на странице.

1 ответ

Вы должны добавить div с уникальным идентификатором к вашему рендеру отношений. Например:

<div id="delegates-relation">
    <?= $this->relationRender('delegates') ?>
</div>

Затем в вашем контроллере вы должны добавить relationExtendRefreshResults($field) метод и вернуть ваш новый HTML из рендера отношения с идентификатором, определенным выше.

/**
 * Update fields after a relation has changed
 *
 * @param $field the relation field that has changed.
 * @return array|null
 */
public function relationExtendRefreshResults($field):? array
{
    if ($field !== 'yourField') { // here you can check which field was updated.
        return null;
    }

    return [
        '#delegates-relation'=> $this->relationRender('delegates'),
    ];
}
Другие вопросы по тегам