问题描述
想要以以编程方式向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;
}