Как вы можете использовать пакет ResourceWatcher от YoSymfony? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь создать средство просмотра файлов, где при добавлении, обновлении или удалении файла вы можете видеть обновления файлов в базе данных. Я использую фреймворк Symfony4 и пакет от него под названием ResourceWatcher от YoSymfony. Этот пакет использует пакет Finder от Symfony для поиска файлов в указанных каталогах, а затем наблюдатель сравнивает кэш и новый файл, чтобы увидеть, есть ли какие-либо изменения. Когда я использую метод с наблюдателем, который возвращает массив путей, когда я пытаюсь увидеть массив, он возвращает ноль. Как мне использовать эти методы и их возврат?

Я поместил 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 в терминале.

РЕДАКТИРОВАТЬ: [first_name] находится в моем 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();

1 Ответ

0 голосов
/ 23 мая 2019

Таким образом, похоже, что как только вы используете метод findChanges () -> hasChanges (), он сообщает наблюдателю, что есть некоторые изменения, но затем он сбрасывается, и в наблюдателе больше нет никаких изменений, поэтому бессмысленно использовать$ paths = $ watcher-> findChanges () -> getUpdatedFiles ();так как он всегда ничего не вернет из-за сброса.Мне нужно было сделать переменную с изменениями внутри, чтобы я мог использовать изменения еще раз.

Подробности в коде ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...