Bolt 4 通过 Cron 以编程方式添加记录

Bolt 4 Add Records Programmatically via Cron

想要以编程方式将内容添加到 bolt 4 但是实际上只能看到 1 个 Bolt 3 示例。

希望通过 cron 在长 运行 中将此功能 运行 但是此功能在 Bolt 4 中看起来也是次要的,但我肯定可以搞砸一个运行.

的方式

Bolt 3 中建议以下内容:

$values = file('myfile.csv');

// now create an associative array to use below

$record = $this->app['storage']->getEmptyContent($contenttypeslug);
$record->setValues($values);

$id = $this->app['storage']->saveContent($record);

但这似乎不起作用,因为我猜这次更新中发生了很多变化。我打算通过 api 然后 运行 获取我的数据,如果有知情者可以建议如何解决这个问题?

我已经开始研究使用 Bolt\Repository\ContentRepository;Bolt\Controller\Backend\ContentEditController,方法是尝试在此处挑选类似的功能:

https://github.com/bobdenotter/conimex/blob/master/src/Import.php

然而,这对我来说似乎过于复杂,无法完全区分,只想要一个更简单的例子,可能是图像/图像库。

到目前为止,我已经开始使用命令行功能,然后可以使用系统 cron 以所需的频率 运行 它。首先,由于多种原因,下面的代码无法正常工作 getFieldToUpdate 似乎抛出一个私有函数错误并且似乎无法通过该错误。

public function import(): void
{
    $user = $this->getUser();
    /** @var Content $content */
    $slug = 'test-property';

    $contentTypeSlug = 'properties';
    $contentType = $this->config->getContentType($contentTypeSlug);
    $content = $this->contentRepository->findOneBySlug($slug, $contentType);

    if (! $content) {
        $content = new Content($contentType);
        $content->setStatus('published');
        $content->setAuthor($user);
    }
    $content->setFieldValue("bedrooms", 2);
    //$field = $this->contentEditController->getFieldToUpdate($content, 'bedrooms');
    //$this->contentEditController->updateField($field, $item, null);
    //$content->setFieldValue($key, $item);
    
    $this->em->persist($content);
    $this->em->flush();
    
}

private function getUser()
{
    $user = null;

    // Fall back to the first user we can find. ‍
    if (! $user) {
        $user = $this->userRepository->findOneBy([]);
    }

    return $user;
}

这里有一个工作示例:

https://github.com/bobdenotter/phpnews_2019/blob/master/src/RssFetcherExtension.php#L93-L191