Vorheriger Artikel Nächster Artikel

TYPO3: Zehn Tipps & Tricks für Extbase und Fluid

Aus dem
t3n Magazin Nr. 24

06/2011 - 08/2011

Settings-Zugriff

Extbase macht es einem wirklich leicht. Unter anderem kann direkt auf TypoScript/Flexform-Settings zugreifen, wer sich an ein paar einfache Regeln hält:

TypoScript

plugin.tx_[lowercasedextensionname] {
	settings {
		setting1 = wert1
	}
}

Listing 11

Flexform

<T3DataStructure>
...
	<el>
		<settings.setting1>
		...
		</settings.setting1>
	</el>
...
</T3DataStructure>

Listing 12

So lässt sich über {settings.setting1} im View beziehungsweise $this->settings['setting1'] im Controller auf die Werte zugreifen. Was aber, wenn im Repository, im ViewHelper oder im Validator diese Settings gebraucht werden? Wirklich elegant geht dies nur im Repository, wenn der Controller aus der Repository-Methode das Setting direkt als Parameter mitgibt. Alternativ (wenn auch nicht offiziell) klappt es auch über den Configuration-Manager und der seit Extbase 1.3 hinzugefügten Dependency Injection:

Im ViewHelper beispielsweise

class Tx_Efempty_ViewHelpers_TestViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
	protected $configurationManager;
	public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
		$this->configurationManager = $configurationManager;
	}
	public function render() {
		// Hier werden nun die Settings ermittelt.
		// Der erste Parameter von getConfiguration muss 'Settings' lauten.
		// Der zweite Parameter beinhaltet den Namen der Extension.
		// Der dritte Parameter beinhaltet den Namen des Plugins.
		$settings = $this->configurationManager->getConfiguration('Settings','Efempty','Pi1');
		...
	}
}

Listing 13

GET/POST Vars

Wenn schon mit Extbase und , dann auch ausschließlich. Methoden der „klassischen“ API – also etwa t3lib_div::_GP('myGPVar') – sollten tabu sein. Wie aber werden dann die GET- beziehungsweise POST-Variablen genutzt?

Auch das ist im Grunde sehr einfach: Die Variable muss einfach automatisch zur Verfügung stehen. Dafür muss schlicht der Namespace passen. Dieser wird automatisch hinzugefügt, wenn beispielsweise ein Feld in einem Formular mit dem entsprechenden ViewHelper anlegt wird. Da keine Zuordnung zum Model benötigt wird, kann auch auf den Property-Parameter verzichtet werden. Im Controller kann nun die Variable über die Annotation registriert und innerhalb der Methode darauf zugegriffen werden. Das Beispiel zeigt ein Suchformular:

View und Controller

<f:form method="post" action="index">
	<f:form.textfield value="{search}" name="search" />
	<f:form.submit value="Suchen" />
</f:form>
...
/**
 * @param string $search
 */
	public function indexAction($search='*') {
		$this->view->assign('search', $search);

Listing 14

Der Zugriff auf die GET/POST-Variablen kann zudem über $this->request->hasArgument($var) und $this->request->getArgument($var) erfolgen.

Migration zu FLOW3

Wer nur die Boardmittel von Extbase und Fluid verwendet (statt „alter“ TYPO3-API-Befehle), der kann seine Extbase-Extension auch unter FLOW3 verwenden – so die Theorie. In der Praxis funktioniert das aber nur unter folgender Anleitung.

Ausgegangen wird von der Extension „efempty“, die zunächst aus dem TER installiert werden muss. Zusätzlich wird Phoenix Sprint Release 6 (oder FLOW3 Alpha 14 bzw. neuer) installiert – eine Anleitung hierfür bieten diverse Blogs [4].

Jetzt geht es ans Kopieren: Das Verzeichnis typo3conf/ext/efempty () in das Verzeichnis Packages/Application/Efempty (FLOW3, großer Anfangsbuchstabe). Sicherlich wird es in absehbarer Zeit Migrationsskripte geben – aber bis es soweit ist, müssen einige Änderungen manuell durchgeführt werden.

Classes/Controller/StartController.php

<?php
declare(ENCODING = 'utf-8');
namespace F3\Efempty\Controller;
...
class StartController extends \F3\FLOW3\MVC\Controller\ActionController {
...
// Instanzierung
$start = new \F3\Efempty\Domain\Model\Start;

Listing 15

Allen Klassen (also allen Dateien im Classes-Verzeichnis) müssen Namespace-Deklarationen vorangestellt werden. Diese beginnen (hier) immer mit F3 und darauf folgen alle Verzeichnisse mit einem „\“ getrennt. Dafür können anschließend alle Klassennamen verkürzt werden auf den eigentlichen Namen. Bei den abgeleiteten Klassen wiederum muss der Pfad mit angegeben werden – anders als in Extbase ebenfalls mit F3 beginnend und die Pfadbestandteile mit „\“ getrennt.

Bei der Domain-Model-Klasse kann sogar ganz auf die Erweiterung der abstrakten Klasse verzichtet werden, hier reicht die entsprechende Annotation (@entity bzw. @valueobject).

Classes/Domain/Model/Start.php

<?php
declare(ENCODING = 'utf-8');
namespace F3\Efempty\Domain\Model;
...
// @entity
class StartController extends \F3\FLOW3\MVC\Controller\ActionController {
...
}

Listing 16

Nun fehlt noch eine Route für die Extension in der Datei Configuration/Routes.yaml:

Configuration/Routes.yaml

name: 'Efempty'
uriPattern: 'efempty'
defaults:
	'@package': 'Efempty'
	'@controller': 'Start'
	'@action': 'index'
	'@format': 'html'

Listing 17

Abschließend muss die (nun Package genannte) Extension im System aktiviert werden. Im besten Fall funktioniert das mit dem Kommandozeilentool von FLOW3; alternativ reicht ein entsprechender Eintrag in der Datei Configuration/PackageStates.yaml.

Package-Aktivierung

./flow3 package activate Efempty

Listing 18

Bei einem Aufruf via http://IhreDomain/efempty zeigt sich, dass die Extension (Package) jetzt auch unter FLOW3 läuft.

Links und Literatur

Softlink 2924
  1. Listings: Alle Listings des Artikels als zip-File
  2. 1 http://www.netbeans.org
    Netbeans
  3. 2 http://bit.ly/k1dozf
    MVC-Mailingliste
  4. 3 http://bit.ly/jGOwj5
    Netbeans Code-Templates
  5. 4 http://bit.ly/fsqjcr
    Phoenix-Installationsanleitung
Newsletter Newsletter

Abonniere unseren Newsletter und erhalte einen exklusiven Artikel aus dem aktuellen t3n Magazin.

Jetzt lesen: t3n Newsletter Nr. 563

Vorheriger Artikel Zurück zur Startseite Nächster Artikel
3 Antworten
  1. von Stefan am 22.05.2012 (16:20 Uhr)

    Schöne Übersicht, ein paar Punkte sind sehr hilfreich bei Problemen die bisher echt Nerven gekostet haben. Die verfügbaren Extbase/Fluid-Dokus sind ja insgesamt etwas mager und wiederholen sich auf einem bestimmten Niveau.
    Hier sind aber endlich mal ein paar neue Beispiele - vielen Dank!

    Antworten Teilen
  2. von Claus am 26.07.2012 (13:15 Uhr)

    Das Code Template von Typovision enthält einen Fehler. Das Image Tag hat kein Argument source, sondern src.

    Antworten Teilen
  3. von sabine.deeken am 05.11.2013 (13:11 Uhr)

    Settings-Zugriff im Viewhelper mit Namespaces (getestet in TYPO3 6.1):

    /**
    * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
    * @inject
    */
    protected $configurationManager;

    /**
    * Injects the configuration manager, retrieves the plugin settings from it
    *
    * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
    * @return void
    * @override \TYPO3\CMS\Extbase\Mvc\Controller\AbstractController
    **/
    public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager) {
    $this->configurationManager = $configurationManager;
    $settings = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);
    $this->settings = $settings;
    }

    Antworten Teilen
Deine Meinung

Bitte melde dich an!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Aktuelles aus dem Bereich Fluid
TYPO3 CMS 7.3 ist da: Das bringt die neue Version
TYPO3 CMS 7.3 ist da: Das bringt die neue Version

Heute wurde mit TYPO3 CMS 7.3 der nächste Sprint-Release auf dem Weg zum Long-Term-Support (LTS) veröffentlicht, der unter anderem eine verbesserte Performance und eine bessere Stabilität mitbringt. » weiterlesen

TYPO3 CMS 7.1: Bessere Performance, Responsive Backend und mehr
TYPO3 CMS 7.1: Bessere Performance, Responsive Backend und mehr

Mit TYPO3 CMS 7.1 ist der nächste Sprint-Release auf dem Weg zum Long-Time-Support-Release 7.6 veröffentlicht worden. Was es in der neuen Version für Neuerungen gibt, haben wir für euch … » weiterlesen

TYPO3 CMS – Die wichtigsten Neuerungen von der T3CON
TYPO3 CMS – Die wichtigsten Neuerungen von der T3CON

TYPO3 CMS hat noch eine längere Zukunft vor sich, das wurde auf der diesjährigen T3CON 2014 in Berlin klar. Obwohl Vorträge zu Neuerungen in Neos auf der Konferenz insgesamt in der Mehrzahl waren, … » weiterlesen

Alle Hefte Jetzt abonnieren – für nur 35 €

Kennst Du schon unser t3n Magazin?

t3n 40 jetzt kostenfrei probelesen! Alle Inhalte des t3n Magazins Diesen Hinweis verbergen