透過namespace找到composer package中的檔案路徑
透過namespace來找到Vendor資料夾中安裝的composer package中的某一個檔案路徑,而不是直接寫死路徑在vendor/VENDOR_NAME/PACKAGE_NAME/src
範例:
找到namespace為virtualorz\mysdk
中的config/abc.php檔案
1 2 3 4 |
protected function _getClassLoader() { return require base_path('vendor/autoload.php'); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
protected function get_file_path(string $path): string { $loader = $this->_getClassLoader(); $psr4 = $loader->getPrefixesPsr4(); $namespace = 'virtualorz\\mysdk\\'; $target_file_name = "config/abc.php"; // 要找的檔案名稱 $path_location = ''; foreach ($psr4 as $prefix => $paths) { if (str_starts_with($namespace, $prefix)) { foreach ($paths as $path) { // 處理多個路徑 $relativePath = str_replace($prefix, '', $namespace); $relativePath = str_replace('\\', '/', $relativePath); $path = $path . '/' . $relativePath . $stubFilename; if (file_exists($path)) { $path_location = $path; } } } } return $path_location; } |
說明:
透過$psr4取得autoload中的所有路徑
1 |
$psr4 = $loader->getPrefixesPsr4(); |
找到開頭跟定義好的$namesapce相同的路徑,最後帶入要找的$target_file_name,確認檔案是不是存在
存在的話這個檔案路徑就是目標了