Проблем с еднакви файлове.

dakata__92

Super Moderator
Преди време драснах един клас за лоадване на повече от една конфигурационна папка, но се оказа проблем когато в две от папките има два файла с еднакво име но различно съдържание. В метода load винаги ми връща резултат от първата папка в която е файла, но на мен често ми трябва от друга папка. Дайте малко идеи и помощ:
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') частта в червено.
 
Доколкото разбирам имаш конфигурация на фрейма и конфигурация на програмиста. Лесно стигаш до извода, че Configuration няма да е singleton, ами ще имаш две инстанции - по една за всяка конфигурация. :?:
 
anonimen каза:
Доколкото разбирам имаш конфигурация на фрейма и конфигурация на програмиста. Лесно стигаш до извода, че Configuration няма да е singleton, ами ще имаш две инстанции - по една за всяка конфигурация. :?:
Значи просто да направя две инстанции на един и същи клас с две различни инстанции. Хммм не се бях сетил да го направя така ще пробвам. :)
 
А няма ли да искаш да ги merge-неш (с приоритет на потребителските настройки) и да имаш само 1 място, от което да ги достъпваш?
 
djman каза:
А няма ли да искаш да ги merge-неш (с приоритет на потребителските настройки) и да имаш само 1 място, от което да ги достъпваш?
Не. Ще оставя хората да избират кои файлове да заредят и от коя папка. :)
 

Back
Горе