我正在尝试使文件监视程序在其中添加,更新或删除文件时可以在数据库中看到文件更新。我使用的是Symfony4框架和来自YoSymfony的名为ResourceWatcher的捆绑软件。该捆绑包使用Symfony的Finder捆绑包在指定目录中查找文件,然后,观察者将缓存和新文件进行比较,以查看是否有任何更改。当我使用带有观察者的方法时,它返回一个路径数组,当我尝试查看该数组时,它返回null。我应该如何使用这些方法及其返回值?
我到处都放了var_dump,发现问题出在findChanges()-> getUpdatedFiles()和getNewFiles();
//旧代码
$finder = new Finder();
$finder->files()
->name('*.csv')
->in('%kernel.root_dir%/../src/data/');
//watcher
$hashContent = new Crc32ContentHash();
$resourceCache = new ResourceCachePhpFile('cache-key.php');
$watcher = new ResourceWatcher($resourceCache, $finder, $hashContent);
$watcher->initialize();
if($watcher->findChanges()->hasChanges()){
if($watcher->findChanges()->getNewFiles() === null){
$paths = $watcher->findChanges()->getUpdatedFiles();
}
else{
$paths = $watcher->findChanges()->getNewFiles();
}
$propertyAccessor = PropertyAccess::createPropertyAccessor();
var_dump($propertyAccessor->getValue($paths, '[first_name]'));
die();
}
我希望能够看到路径,将其转换为字符串并将其用于其他方法,以使数据显示在数据库中。
在我的var_dump中,终端显示NULL。
编辑:[名字]在我的csv文件中,您可以直接转储$ paths。
//新代码
$finder = new Finder();
$finder->files()
->name('*.csv')
->in('%kernel.root_dir%/../src/data/');
//watcher
$hashContent = new Crc32ContentHash();
$resourceCache = new ResourceCachePhpFile('cache-key.php');
$watcher = new ResourceWatcher($resourceCache, $finder, $hashContent);
$watcher->initialize();
$changes = $watcher->findChanges();
if(!empty($changes->getUpdatedFiles())){
$updatedFilesPath = $changes->getUpdatedFiles();
$pathString = implode($updatedFilesPath);
$reader = Reader::createFromPath($pathString);
}
elseif(!empty($changes->getNewFiles())){
$newFilesPath = $changes->getNewFiles();
$pathString = implode($newFilesPath);
$reader = Reader::createFromPath($pathString);
}
else{
return;
}
$results = $reader->fetchAssoc();
答案 0 :(得分:0)
因此,当您使用方法findChanges()-> hasChanges()时,它看起来像这样,它告诉观察者有一些更改,但随后会重置并且观察者中没有任何更改,因此使用毫无意义。 $ paths = $ watcher-> findChanges()-> getUpdatedFiles(); 因为由于重置,它将始终不返回任何内容。我必须在其中包含所做的更改来创建变量,以便可以进一步重复使用这些更改。
代码中的详细信息...