Текстовый файл преобразует символ C '\n'
в родную строку, заканчивающуюся на выходе, и преобразует собственную строку, заканчивающуюся на входе, в один '\n'
.
Чтобы получить требуемый результат, вам нужно будет изменить stdout
в поток двоичных файлов.
Частичный ответ найден здесь здесь . Если у вас есть библиотека, совместимая с C99, использование:
if (freopen(0, "wb", stdout) == 0)
...oops...operation failed...
попытается изменить стандартный вывод на двоичный поток. Однако в Windows может возникнуть проблема с библиотекой, совместимой с C99. Номинально это переносимый (поскольку стандартный) ответ. Вероятно, для выполнения одной и той же работы существует функция, специфичная для Windows.
Проблема в том, что 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'));
}
}
[1110 ] Я также поднял вопрос о том, чтобы следить за вводящей в заблуждение документацией: https://github.com/silverstripe/silverstripe-framework/issues/8773