Как вы обновляете внутреннюю форму после добавления отношения, используя отношение 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'),
];
}