Extbase PHP based view

Extbase PHP based view

In einer Extbase Extension kann man neben Fluid auch eigene PHP based views verwenden um etwas auszugeben. Dies macht vor allem dann Sinn, wenn es kein HTML ausgegeben werden soll, sondern z.B. json, csv.

Warum PHP based views? Man kann doch auch aus der Action direkt returnen?

Vorteile:

  • Durch die Verwendung von PHP based views sind die Aufgaben nach MVC sauber getrennt.
  • Man kann mehrere PHP based views für die selbe Action erstellen, je nach Format.
    Das spart if-Abfragen in der Controller Action

Wissenswertes

Beispieldaten:

Vendor: T3easy
Extensionkey: foobar
Controller: foo
Action: export
Format: json

Der Controller

Aus der Action wird mit

$this->view->assign('foo', $foo);

oder

$this->view->assignMultiple(array(
    'foo' => $foo,
    'bar' => $bar
));

Daten/Objekte an den View übergeben, genau wie bei einem Fluid Template.

Das Format kann NICHT in der Action per

$this->request->setFormat();

gesetzt werder, sondern muss dem Link mitgegeben werden (Stand TYPO3 6.0.4).

Der PHP based view

Unter Berücksichtigung der Beispieldaten muss die Datei für den PHP based view unter

foobar/Classes/View/Foo/ExportJson.php

liegen. Das Format im Datei- und Klassennamen ist optional, sollte für das gewünschte Format keine Datei/Klasse gefunden werden würde auf Export.php zurück gegriffen.

Es darf kein Fluid Template für die Action+Format-Kombination vorhanden sein, da dieses vorgezogen wird.

Achtung!!! Die Namenskonvention ist:

Tx_@extension_View_@controller_@action@format(Kein Unterstrich zwischen @action und @format wie im Extbase/Fluid Book zu lesen)

Die PHP Klasse muss

Tx_Foobar_View_Foo_ExportJson

heißen (für TYPO3 6.0 siehe Beispiel unten), siehe API.

Um unter TYPO3 6.0 mit PHP based views zu arbeiten, empfehle ich im Controller viewObjectNamePattern zu überschreiben, siehe unten.

Die Klasse muss eine Methode "render" enthalten, welche den die gewünschten Informationen ausgibt.

In der Methode "render" kann per

$this->variables['foo'];

auf übergebene Daten/Objekte mit dem Namen als Array-Key zugegriffen werden.

Links:

http://docs.typo3.org/typo3cms/ExtbaseFluidBook/8-Fluid/9-using-php-based-views.html

Ergänzungen/Fehler/Feedback:

gerne per Twitter an @t3easy_de

Action mit PHP based view

	/**
	 * export action
	 *
	 * @param \T3easy\Foobar\Domain\Model\Foo $foo
	 * @return void
	 */
	public function exportAction(\T3easy\Foobar\Domain\Model\ $foo) {
		$this->view->assign('foo', $foo);
	}

The PHP based view

<?php
namespace T3easy\Foobar\View\Foo;

//foobar/Classes/View/Foo/ExportJson.php

/**
 * Return foo json encoded
 * Action name followed by the format
 *
 * @return string
 */
class ExportJson extends \TYPO3\CMS\Extbase\Mvc\View\AbstractView {
// Tx_Foobar_View_Foo_ExportJson extends Tx_Extbase_MVC_View_AbstractView
	/**
	 * Renders the view
	 *
	 * @return string The rendered view
	 */
	public function render() {
		$foo = $this->variables['foo'];
		$fooArray = $foo->_getCleanProperties();
		return json_encode($fooArray);
	}

}

?>

PHP based view unter TYPO3 6.0

// Override viewObjectNamePattern in your controller
<?php
namespace T3easy\Foobar\Controller;

class FooController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {

/**
 * Pattern after which the view object name is built if no Fluid template
 * is found.
 *
 * @var string
 */
protected $viewObjectNamePattern = 'T3easy\\@extension\\View\\@controller\\@action@format';
// Currently there is no placeholder for vendor

//...
}
?>
Stichwörter zu dieser Seite: 
Generator: TYPO3 CMS 6.2
Google Page Speed
@t3easy_de folgen
Google+