Ik wil graag gemakkelijk bestanden kunnen inlezen, denk bijvoorbeeld aan ini, xml, json, yaml etc. Dit kan ik dan bv gemakkelijk koppelen aan een Config/Translator object.

Ik probeer het een beetje uit te denken, hoe zouden jullie zoiets aanpakken? Ik dacht zelf aan zoiets:

Functie aanroepen

<?php

	FileLoader::load('some/directory/file.xml'); // Returnt een Array met de bestands inhoud	

?>



<?php

	class FileLoader {
		public static function load($file, $options) {
			// Kijken wat voor extentie $file heeft.
			// Aan de hand van de extentie kijken of er een loader (adapter) bestaat die het bestand kan lezen, bijvoorbeeld FileLoader/Adapter/Xml of FileLoader/Adapter/Json etc.

			$extension = pathinfo($file, PATHINFO_EXTENSION);

			if ($extension is class) {
				// Options is een array met de options voor de loader (bv nest seperator voor ini)
				$loader = new $extension($options);

				return $class->load($file);
			}

			// Geen class return standaard array
			return array();
		}
	}	

?>
Wat je nu doet is een FileLoader maken die een andere FileLoader maakt. De eerste FileLoader is dus eigenlijk een FileLoaderFactory.

Ik zou zoiets doen:
LoaderInterface
+ load($resource)

AbstractFileLoader < LoaderInterface
+ load($file)
# parse($text)

XmlFileLoader < AbstractFileLoader
# parse($text)

YamlFileLoader < AbstractFileLoader
# parse($text)

FileLoader(Factory)
+ getLoader($fileName)

In gebruik:
<?php
$file = '/path/to/file.xml';
$loader = FileLoaderFactory::getLoader($file); //> XmlFileLoader

$text = $loader->load($file); //> string
?>
[offtopic]
Wouter, als je met een FileSystem werkt zou je dit soort methods dan ook daarin kunnen stoppen?

<?php
$text = $container->get('FileSystem')->loadXML('/path/to/file.xml');
?>
Of is de XMLLoader dan een aparte service?

<?php
$text = $container->get('XMLLoader')->load('/path/to/file.xml');
?>
[/offtopic]
[offtopic]
>> Wouter, als je met een FileSystem werkt zou je dit soort methods dan ook daarin kunnen stoppen?

FileSystem is alleen een klasse die de content van een bestand kan schrijven, lezen, etc. Het parsen daarvan is geen taak van de filesystem, dat is de taak van een loader. De Loader zal tevens anders zijn voor elk configuratie bestand.[/offtopic]
[offtopic]
Gebruik je dan in die loader zelf wel je FileSystem om het bestand in te lezen?
[/offtopic]

Reageren