我可以通过创建一个命令控制器来解决这个问题,该控制器使用数据处理程序将源页面复制到目标页面。
/**
* @param int $src
* @param int $target
*/
public function copyCommand(int $src, int $target): void
{
/** @var PageRepository $pageRepository */
$pageRepository = GeneralUtility::makeInstance(PageRepository::class);
$srcPage = $pageRepository->getPage($src);
if (empty($srcPage)) {
throw new InvalidArgument("$src ist not a valid page uid");
}
if (empty($pageRepository->getPage($target))) {
throw new InvalidArgument("$target ist not a valid page uid");
}
$cmd = [
'pages' => [
$src => [
'copy' => [
'action' => 'paste',
'target' => $target,
'update' => [
'title' => sprintf("Copy of #%d: %s", $src, $srcPage['title']),
'hidden' => 1,
]
]
]
]
];
/** @var DataHandler $dataHandler */
$dataHandler = GeneralUtility::makeInstance(DataHandler::class);
$dataHandler->start([], $cmd);
$dataHandler->process_cmdmap();
}