Получить имя файла из самого архива PharData

Мой класс создает PharData архивы для меня. Название архива известно не всем функциям класса. В основном у меня есть план, как это:

public function doStuff(\PharData $bundle)
{
    $file = //someFile
    $bundle->addFile($file);

    $this->db->update($file is in $bundle->getName(????));
}

Насколько я могу судить, единственный способ получить доступ к имени пакета getAlias() функция $bundle переменная. Однако это дает мне полное имя файла, и мне нужно будет вручную basename($bundle->getAlias()),

Мне действительно интересно, нет ли пути в PharData класс, чтобы получить собственно имя файла архива.

Мне НЕ нужны имена файлов внутри архива, на самом деле все, что мне нужно, это получить доступ к имени файла самого архива. Я просто не знаю, насколько getAlias() на самом деле, так как это название довольно запутанно.

2 ответа

Решение

Вы можете хранить собственные данные с PharData::setMetadata() метод. Таким образом, вы можете сохранить имя файла в метаданных PHAR и получить его снова в более поздний момент с помощью PharData::getMetadata() метод.

Установите это так:

$bundle->setMetaData(array('bundleFileName' => 'your_bundle.phar'));

Таким образом, вы можете получить это в вашем методе так:

public function doStuff(\PharData $bundle)
{
    $metaData = $bundle->getMetaData();
    $file     = //some File

    $bundle->addFile($file);

    $this->db->update($file is in $bundle->getMetadata['bundleFileName']);
}

Но я думаю, что если вы правильно спроектируете свой класс, вам не понадобится этот уродливый обходной путь.

Вопрос уже несколько старше, но к дополнению:

Мне действительно интересно, если в классе PharData нет способа получить собственно имя файла архива.

PharData расширяет FilesystemIterator, и поэтому вы можете использовать

// Get the path to the current DirectoryIterator item.
// DirectoryIterator::getPath();
$bundle->getPath();

http://php.net/manual/de/class.filesystemiterator.php

Другие вопросы по тегам