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

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 14 марта 2019

Вы должны добавить 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'),
    ];
}
...