[TYPO3-dev] FAL in an Extbase 6.0 extension... but how?!

Helmut Hummel helmut.hummel at typo3.org
Wed Feb 6 18:21:22 CET 2013


Hi,

On 31.01.13 18:37, Anders Gissel wrote:

> thanks to some helpful tips from a fellow TYPO3-freak, I was able to get
> things up and running.

Great you managed to get it going. Who was the "TYPO3-freak"? :)

> Mind you, these are extremely dirty hacks (albeit
> inside your own extension only),

It is not that bad, if you skip the select query and use an API method 
for that as I will show below.

> and once Extbase starts properly
> supporting FAL (which, currently, it doesn't), you will have to change a
> lot of things, at the very least in your frontend rendering.

We will be working on that during the Extbase code sprint this weekend.

> You'd be
> wise to plan accordingly. But without further ado, here's how to use FAL
> to attach a single image to a domain model object, and then retrieve the
> raw data in frontend.

You could use the object instead. Works fine with all the getters that 
do not have parameters (like getProperty).

> Here's where things get tricky. Your regular domain model should
> probably look something like this:

>       /**
>        * Returns the file USING HAXX0RED METHODS! PLEASE DON'T TRY THIS
> AT HOME, KIDS!

:)

>        *
>        * @return array $file
>        */
>       public function getFile() {
>
>           // Get the UID from the current image object.
>           $objectUid = $this->getUid();
>
>           // Use the UID to search sys_file_reference
>           $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('uid',
> 'sys_file_reference', "uid_foreign={$objectUid} AND fieldname = 'file'
> AND tablenames = 'tx_myext_domain_model_image' AND deleted=0 AND hidden=0");
>           if (is_array($row)) {
>               $fileObject =
> $this->typo3FALRepository->findFileReferenceByUid($row['uid']);

change this to to:

$fileObject = $this->typo3FALRepository->findByRelation('<your table 
name>', 'file', $this->getUid());

And it will be much cleaner and not so likely to break as it is a pulic 
API.

'file' here again is the field name defined in TCA.

>               $fileObjectData = $fileObject->toArray();

You can do that, but using the object directly should be fine, too.

Kind regards,
Helmut

-- 
Helmut Hummel
Release Manager TYPO3 6.0
TYPO3 Core Developer, TYPO3 Security Team Member

TYPO3 .... inspiring people to share!
Get involved: typo3.org



More information about the TYPO3-dev mailing list