2014-07-07 5 views
0

수업은 내게 PharData 개의 보관함을 만듭니다. 아카이브의 이름은 해당 클래스의 모든 기능에 알려져 있지 않습니다.PharData 보관함 자체에서 파일 이름 가져 오기

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

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

지금까지 내가 말할 수있는 번들 이름에 대한 액세스 권한을 얻을 수있는 유일한 방법은 $bundle 변수의 getAlias() 기능입니다 : 기본적으로이 같은 개요를 가지고있다. 그러나 이것은 나에게 완전한 파일 이름을 주며 나는 수동으로 basename($bundle->getAlias())을 필요로 할 것이다.

PharData 클래스에 실제 보관 파일 이름 자체를 가져올 방법이 없는지 궁금합니다.

아카이브의 파일 이름은 필요하지 않습니다. 필자가 필요로하는 것은 아카이브 자체의 파일 이름에 액세스하는 것입니다. 나는 그 이름이 꽤 혼란 스럽기 때문에 getAlias()이 얼마나 의존적 인 지 모르겠습니다.

답변

1

PharData::setMetadata() 방법으로 자신의 데이터를 저장할 수 있습니다. 따라서 PHARs 메타 데이터에 파일 이름을 저장하고 나중에 PharData::getMetadata() 메소드를 사용하여 다시 가져올 수 있습니다. 이 같은

설정을 :

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

    $bundle->addFile($file); 

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

하지만 제대로이 필요하지 않습니다 클래스를 디자인 할 경우 생각 :

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

그래서 당신은 다음과 같이 당신의 방법을 얻을 수 못생긴 해결 방법.

+0

흠을 사용할 수 있습니다, 나는이 적어도이 정보 이것에 대한 :) 감사에 대한 내 경우에는 작동 같아요. 내가 실제로하고있는 것을 더 잘 보여주기 위해 답을 약간 편집 할 것입니다.) – Sam

0

이 문제는 이미 있지만, 보충 다소 오래된 :

실제 아카이브 파일 이름 자체를 얻을 수있는 PharData 클래스의 방법이 없다면 정말 궁금하네요.

PharData이 FilesystemIterator를 확장하기 때문에 당신이

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

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