Bolt 4 通过 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