Проблема в том, что GridFieldDetailForm_ItemRequest::getFormActions()
не вызывает $this->record->getCMSActions()
, вместо этого он определяет свой начальный список действий как $actions = new FieldList();
.
Я предполагаю, что вы управляете своим DataObject через ModelAdmin.
Вы можете добавить расширение к этому классу и таким образом добавить поля (но это неоптимально):
# File: app/_config/extensions.yml
SilverStripe\Forms\GridField\GridFieldDetailForm_ItemRequest:
extensions:
MyExtension: MyExtension
И ваше расширение может выглядеть так:
<?php
use SilverStripe\Forms\DropdownField;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\FormAction;
use SilverStripe\ORM\DataExtension;
class MyExtension extends DataExtension
{
public function updateFormActions(FieldList $actions)
{
$record = $this->owner->getRecord();
// This extension would run on every GridFieldDetailForm, so ensure you ignore contexts where
// you are managing a DataObject you don't care about
if (!$record instanceof YourDataObject || !$record->exists()) {
return;
}
$actions->push(FormAction::create('copy', _t('SiteBlockAdmin.Copy', 'Copy'))
->setUseButtonTag(true)
->setAttribute('data-icon', 'arrow-circle-double'));
$actions->push(DropdownField::create('BegrotingsPageCopyToID', '', BegrotingsPage::get()->map())
->setEmptyString('Selecteer pagina voor kopie'));
}
}
Я также поднял вопрос, чтобы следить за вводящей в заблуждение документацией: https://github.com/silverstripe/silverstripe-framework/issues/8773