Vorheriger Artikel Nächster Artikel

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

1 3

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
1 3
Vorheriger Artikel Zurück zur Startseite Nächster Artikel
3 Antworten
  1. von Stefan am 22.05.2012 (16:20Uhr)

    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:15Uhr)

    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:11Uhr)

    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 Mask: Die Template-Alternative zu Templavoila
TYPO3 Mask: Die Template-Alternative zu Templavoila

Derzeit gibt es wenige Templating-Ansätze im TYPO3 CMS. Einige Erweiterungen sind veraltet und andere bieten einfach zu wenig Funktionalität. Genau das soll TYPO3 Mask ändern. » weiterlesen

TYPO3-Podcast T3Bits: Neue Episoden zu Responsive Webdesign und Fluid
TYPO3-Podcast T3Bits: Neue Episoden zu Responsive Webdesign und Fluid

Vor etwas mehr als einem Monat ist der TYPO3-Podcast T3Bits gestartet. Webentwickler Sebastian Michaelsen behandelt darin die Welt rund um das CM-System. Seit der ersten Episode sind inzwischen zwei.. ... » weiterlesen

TYPO3 CMS 6.2: Alle Features der neuen Version im Überblick
TYPO3 CMS 6.2: Alle Features der neuen Version im Überblick

Am gestrigen Dienstag wurde die neue Version 6.2 des beliebten Content-Management-Systems (CMS) TYPO3 veröffentlicht. Welche Änderungen und Verbesserungen es gibt, haben wir hier für euch … » weiterlesen

Kennst Du schon unser t3n Magazin?

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