Utilities¶
The extension also provides a couple of utility classes. Their features are described here.
Format conversions¶
The \Cobweb\Svconnector\Utility\ConnectorUtility class provides a
conversion method utility, which transforms a
XML structure into a PHP array without losing any information. This
method is simply called as:
$phpArray = \Cobweb\Svconnector\Utility\ConnectorUtility::convertXmlToArray($xml)
Of course one's own conversion method may be used if needed. The conversion from a PHP array to a XML structure can safely rely on TYPO3 CMS API. e.g.:
$xml = '<?xml version="1.0" encoding="utf-8" standalone="yes" ?>' . "\n" . GeneralUtility::array2xml($result);
Again one's own conversion method may be used if needed.
Reading files¶
The \Cobweb\Svconnector\Utility\FileUtility provides a general
method for reading the content of a file. It will transparently handle
the following syntax for pointing to a file:
an absolute file path (within the TYPO3 root path or
TYPO3_CONF_VARS[BE][lockRootPath]), e.g./var/foo/web/fileadmin/import/bar.csva file path relative to the TYPO3 root, e.g.
fileadmin/import/foo.txta file reference using the
EXT:syntax, e.g.EXT:foo/Resources/Private/Data/bar.txta fully qualified URL, e.g.
http://www.example.com/foo.txta FAL reference including storage ID and file identifier, e.g.
FAL:2:/foo.txta custom syntax, starting with whatever keyword you want, e.g.
MYKEY:whatever_you_want
For the latter, you need to implement a "reader" class which will handle this custom reference.
This class must inherit from \Cobweb\Svconnector\Utility\AbstractFileReader. It must
be declared like a hook, using the custom keyword (without the colon) as a key. Example:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['svconnector']['fileReader']['MYKEY']
The class must implement the read() method, which is expected to return the
file's content as a string, or false if some problem happened. An error message
about the problem can be reported from within the reader using:
$this->fileUtility->setError('Some reason here');
The read() method receives the full syntax as input (in the above example,
MYKEY:whatever_you_want).
Using the \Cobweb\Svconnector\Utility\FileUtility in your own Connector service
is very easy. Here is how it's done in the "svconnector_csv" extension
$fileUtility = GeneralUtility::makeInstance(\Cobweb\Svconnector\Utility\FileUtility::class);
$fileContent = $fileUtility->getFileContent($parameters['filename']);
The getFileContent() method will return false if some error happened reading
the file. An error message is available to retrieve using:
$error = $fileUtility->getError();
If you would rather have the content stored into a (temporary) file rather than returned
directly, you can use the getFileAsTemporaryFile(), which will return the
full path to the file where the content is stored. It is up to you to read the file
and delete it once done:
$fileUtility = GeneralUtility::makeInstance(\Cobweb\Svconnector\Utility\FileUtility::class);
// Get the content stored into a temp file
$filename = $fileUtility->getFileAsTemporaryFile($parameters['filename']);
// Read from the file
$content = file_get_contents($filename);
// Remove the file
unlink($filename);
Method getFileAsTemporaryFile() will also return false when something went
wrong reading the distant data.