dakata__92
Super Moderator
Преди време драснах един клас за лоадване на повече от една конфигурационна папка, но се оказа проблем когато в две от папките има два файла с еднакво име но различно съдържание. В метода load винаги ми връща резултат от първата папка в която е файла, но на мен често ми трябва от друга папка. Дайте малко идеи и помощ:
Викам така:
Проблема е във метода лоад. Какъв параметър да му подам за да знае че търся във втората папка. Тоест вероятно ще стане нещо от сорта на
$cnf->load('mainTest.php',PUBLIC_CONFIG_FOLDER);
но неснам как точно да го структорирам в самият метод. Забих тотално. Опитвайки се да го интегрирам се получи това добавяне в метода както е в кода горе public function load($filePathName,$searchFolder=null,$extension='.php') частта в червено.
PHP:
<?php
namespace System\Core;
class Configuration
{
use \system\traits\Singleton;
private $_configFolders = array();
public function setConfigFolder($folderPath)
{
if (!$folderPath) {
throw new \Exception('Empty config folder path.',500);
}
$_folderPath = realpath($folderPath);
if ($_folderPath and is_dir($_folderPath) and is_readable($_folderPath)) {
$_folderPath .= DIRECTORY_SEPARATOR;
$this->_configFolders[$_folderPath] = $_folderPath;
} else {
throw new \Exception('Config directory read error:' . $folderPath);
}
return $this;
}
public function setConfigFolders(array $foldersPaths)
{
if (!$foldersPaths) {
throw new \Exception('Empty array of configurations folders paths.',500);
}
foreach ($foldersPaths as $folderPath) {
$this->setConfigFolder($folderPath);
}
return $this;
}
public function load($filePathName,$searchFolder=null,$extension='.php')
{
if (!empty($searchFolder)) {
$_searchFolder = realpath($searchFolder).DIRECTORY_SEPARATOR;
$this->_configFolders = array_diff($this->_configFolders,array($this->_configFolders[$_searchFolder]));
}
print '<pre>'.$searchFolder;
print_r($this->_configFolders);
print "<hr></pre>";
foreach ($this->_configFolders as $folder) {
$path = $folder.$filePathName.$extension;
$_path = realpath($path);
if (file_exists($_path) and is_readable($_path)) {
return include_once $_path;
}
}
throw new \Exception("No such file in configuration directories!", 500);
}
}
Викам така:
PHP:
//FRAMEWORK_CONFIG_FOLDER,PUBLIC_CONFIG_FOLDER - константи с realpath до папките.
$cnf = \System\Core\Configuration::getInstance()->setConfigFolders(
array(FRAMEWORK_CONFIG_FOLDER,PUBLIC_CONFIG_FOLDER)
);
$cnf->load('mainTest.php');
Проблема е във метода лоад. Какъв параметър да му подам за да знае че търся във втората папка. Тоест вероятно ще стане нещо от сорта на
$cnf->load('mainTest.php',PUBLIC_CONFIG_FOLDER);
но неснам как точно да го структорирам в самият метод. Забих тотално. Опитвайки се да го интегрирам се получи това добавяне в метода както е в кода горе public function load($filePathName,$searchFolder=null,$extension='.php') частта в червено.