FYI. This blog is translated by machine. Please ignore any spelling and grammar errors; sorry for such inconvenience. We appreciate your understanding and support.
Wissen Sie, was TYPO3-Kontext ist? Oder suchen Sie nach einem Konfigurationsleitfaden für Anfänger bis Fortgeschrittene, um Webserver & TYPO3-Kontext auf Anwendungsebene zu verwalten? In diesem Artikel lernen Sie eine praktische Schritt-für-Schritt-Anleitung zur Verwendung von TYPO3-Kontext, z.B. Datenbankkonfiguration, TypoScript-Bedingung, Website-Konfiguration, TYPO3-CLI, etc.
Moderne TYPO3-Entwickler arbeiten an der Automatisierung und mehreren TYPO3-Umgebungen wie Entwicklungsserver, Produktionsserver, Staging-Umgebung, etc. Glücklicherweise bietet das TYPO3 CMS seit Jahren eine entwicklerfreundliche TYPO3-Kontextkonfiguration out-of-box.
Bereiten Sie sich darauf vor, Fähigkeiten zur Konfiguration des TYPO3-Kontextes sowohl auf Serverebene als auch auf der Ebene des Anwendungskontextes zu erwerben.
Was ist der Anwendungskontext von TYPO3?
Im TYPO3 CMS können Sie im oberen Panel (oben im Screenshot) - Was ist der aktuelle TYPO3-Anwendungskontext ganz einfach kennenlernen.
Vereinfacht ausgedrückt ist der TYPO3-Kontext ein Ansatz, um eine bestimmte TYPO3-Umgebung wie Produktion, Staging, einen Testserver usw. zu definieren. Das bedeutet, dass Sie für jede Umgebung eine bestimmte Konfiguration mit den verfügbaren Bedingungen in PHP, Extbase, TypoScript, Yaml usw. definieren können.
Hier finden Sie Beispiele für verschiedene mögliche Typen von TYPO3-Kontexten.
- Live Server: https://www.t3planet.com
- Development Server: https://dev.t3terminal.local
- Testing Server: https://testing.t3planet.com
Welches ist der Standard-TYPO3-Kontext?
Jede Anfrage, egal ob sie von der Befehlszeile oder über HTTP läuft, läuft in einem bestimmten Anwendungskontext. TYPO3 CMS bietet genau drei eingebaute Kontexte:
Die TYPO3_CONTEXT-Variable
Dezidierte Umgebungsvariable, die TYPO3 anweist, verschiedene Kontextumgebungen zu definieren.
Welche sind standardmäßig im TYPO3-Kontext verfügbar?
- Produktion (Standard) - sollte für eine Live-Site verwendet werden
- Entwicklung - verwendet für Entwicklung
- Testing - wird nur intern bei der Ausführung von TYPO3-Kerntests verwendet. Sie darf nicht anderweitig verwendet werden.
Ist ein benutzerdefinierter TYPO3-Kontext vorhanden? Ja, Sub-Kontext!
Natürlich können Sie Ihren eigenen TYPO3-Kontext erstellen, indem Sie Subtext definieren. Hier sind einige Beispiele.
Syntax
- <MainContext>/<SubContext>
Beispiele
- Produktion/Leben
- Produktion/Live/Server2
- Entwicklung/Staging
Wie können wir den TYPO3-Kontext auf dem Web-Server vorbereiten?
1. Schritt zur Erstellung eines TYPO3-Kontextes, Sie müssen "TYPO3_CONTEXT" auf Ihrem bevorzugten Web-Server definieren, Mal sehen wie!
Welche Möglichkeiten gibt es, TYPO3-Kontext im Apache-Webserver zu definieren?
Im Apache-Webserver können Sie den TYPO3-Kontext auf verschiedene Arten konfigurieren.
Option #1 Verwendung der SetEnv-Direktive von Apache
Wenden Sie sich an Ihren Server-Administrator, um die Konfiguration SetEnv Apache's zu erstellen, Hier sind einige Beispiele.
# Define main TYPO3 context
SetEnv TYPO3_CONTEXT Development
# Define domain-wise main TYPO3 context
SetEnvIf Host www\.T3Terminal\.com$ TYPO3_CONTEXT=Production
SetEnvIf Host testing\.T3Terminal\.com$ TYPO3_CONTEXT=Testing
SetEnvIf Host dev\.T3Terminal\.local$ TYPO3_CONTEXT=Development
Option #2 Verwendung von .Htaccess oder mod_rewrite
Wenn Sie den Apache-Server mit Shared Hosting verwenden, können Sie TYPO3_CONTEXT auch mit .htaccess oder mode_rewrite vhost.
# In your Apache configuration (either .htaccess or vhost)
# you can either set a context to static value with:
SetEnv TYPO3_CONTEXT Development
# Or set context depending on the current host header
# using mod_rewrite module
RewriteCond %{HTTP_HOST} ^dev\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Development]
RewriteCond %{HTTP_HOST} ^staging\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging]
RewriteCond %{HTTP_HOST} ^www\.T3Terminal\.com$
RewriteRule .? - [E=TYPO3_CONTEXT:Production]
# or using setenvif module
SetEnvIf Host "^dev\.T3Terminal\.com$" TYPO3_CONTEXT=Development
SetEnvIf Host "^staging\.T3Terminal\.com$" TYPO3_CONTEXT=Production/Staging
SetEnvIf Host "^www\.T3Terminal\.com$" TYPO3_CONTEXT=Production
Option #3 TYPO3_Kontext ohne .Htaccess
Wenn Sie irgendwie keinen Zugang zum Modifizieren mit .htaccess oder mode_rewrite haben, können Sie diese Lösung TYPO3 Context ohne .Htaccess (Anmerkung: Von mir noch nicht getestet).
Wie können wir TYPO3-Kontext in NGNIX konfigurieren?
Viele Leute haben begonnen, mit NGNIX zu arbeiten, was wirklich großartig ist. Sie können die NGNIX-Konfiguration einfach wie folgt konfigurieren.
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param TYPO3_CONTEXT Development/Dev;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Wie man den TYPO3-Kontext im Docker + DDEV einrichtet?
TYPO3-Gemeinschaft liebt DDEV-Lösung als lokale Entwicklungsumgebung, wir lieben sie auch :) Sie können TYPO3_CONTEXT einfach im Docker/DDEV mit den folgenden Schritten konfigurieren.
Schritt 1. Erstellen Sie eine Docker-Compose-Kontextdatei in Ihrem .ddev-Ordner
touch .ddev/docker-compose.context.yaml
Schritt 2. Fügen Sie die untenstehende Konfiguration in die Datei
version: '3.6'
services:
web:
environment:
- TYPO3_CONTEXT=Development
Können wir den TYPO3-Kontext CLI-basiert konfigurieren?
Ja, warum nicht! Heutzutage werden TYPO3-Entwickler immer schlauer und arbeiten mit TYPO3-CLI wie mit einer populären Lösung des "typo3-console package". Um den TYPO3-Kontext in CLI zu konfigurieren, folgen Sie diesen Schritten.
Schritt 1. Gehen Sie zum Home-Verzeichnis (Linux oder Mac)
Schritt 2. Suchen Sie .profile oder .bashrc
Schritt 3. TYPO3_CONTEXT
Konfigurieren
export TYPO3_CONTEXT=Testing
Schritt 4. Kreuzverifizieren Sie es
env | grep TYPO3_CONTEXT
Bei d way, Sie können "TYPO3_CONTEXT" für jeden Befehl zur Laufzeit Ihrer TYPO3 CLI-Befehle wie folgt angeben.
# Run in Development TYPO3 Context
TYPO3_CONTEXT=Development ./typo3/cli_dispatch.phpsh
# Run in Production TYPO3 Context
TYPO3_CONTEXT=Production exec ./vendor/bin/typo3cms cache:flush
# Run in Testing TYPO3 Context
TYPO3_CONTEXT=Testing exec ./vendor/bin/typo3cms install:fixfolderstructure
Wo verwende ich TYPO3-Kontext in einer Echtzeit-TYPO3-Anwendung?
Gut gemacht! Ich hoffe, Sie haben die TYPO3_CONTEXT-Variable erfolgreich auf Ihrem Web-Server, Ihrer lokalen Entwicklungsumgebung und/oder TYPO3-CLI konfiguriert.
Nun, sind Sie davon begeistert, wie einfach es ist, TYPO3_CONTEXT in echten TYPO3-Anwendungen zu verwenden, einige Beispiele wie
- Jede TYPO3-Umgebung sollte eine eigene TYPO3-Site-URL haben (über config.yaml).
- Jede TYPO3-Umgebung sollte eine separate Datenbankkonfiguration haben (über AdditionalConfiguration.php).
- Jede TYPO3-Umgebung kann unterschiedliche Templating-Ausführung haben (durch TypoScript)
- Und so weiter, je nach Bedarf Ihrer TYPO3-Anwendung können Sie TYPO3_CONTEX
- verwenden.
Verwenden Sie 1. Website-URL-Verwaltung mit Backend-Site-Konfiguration (config.yaml)
Seit TYPO3 v9 haben wir ein cooles Site-Verwaltungsmodul zur Verwaltung mehrsprachiger, Site-URLs usw. Um eine separate TYPO3-Site-URL für jede TYPO3-Kontext-Umgebung/jeden TYPO3-Server zu erstellen, können Sie die folgenden Einstellungen vornehmen.
# config/sites/project/config.yaml (composer-based TYPO3 instance)
# or
# typo3conf/ext/sites/project/config.yaml (non-composer based TYPO3 instance)
rootPageId: 1
base: 'https://t3planet.com/'
baseVariants:
-
base: 'http://dev.t3planet.com/'
condition: 'applicationContext == "Development"'
-
base: 'http://staging.t3planet.com/'
condition: 'applicationContext == "Production/Staging"'
Verwenden Sie 2. Unterschiedliche Datenbank-Konfiguration (AdditionalConfiguration.php)
Eine der wichtigsten Aufgaben bei der Verwendung von TYPO3_CONTEXT ist die Definition mehrerer Datenbankkonfigurationen für jede Ihrer TYPO3-Umgebungen.
TYPO3 bietet entwicklerfreundliche Funktionen, um den aktuellen TYPO3-Anwendungskontext zu erhalten.
// Since TYPO3 9LTS
\TYPO3\CMS\Core\Core\Environment::getContext()
// Prior to TYPO3 9LTS
\TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext()
Sie können dies leicht erreichen, indem Sie PHP-Code zu Ihrer AdditionalConfiguration.php hinzufügen, hier ist das Beispiel.
// typo3conf/AdditionalConfiguration.php
<?php
switch (\TYPO3\CMS\Core\Core\Environment::getContext()) {
case 'Development':
$GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 1;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '*';
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
isset($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'])
? $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']
: [],
[
'dbname' => 'db',
'host' => 'db',
'password' => 'db',
'port' => '3306',
'user' => 'db',
]
);
break;
case 'Production':
$GLOBALS['TYPO3_CONF_VARS']['SYS']['displayErrors'] = 0;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask'] = '192.168.1.*';
$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge(
isset($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'])
? $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']
: [],
[
'dbname' => 'project',
'host' => '127.0.0.1',
'password' => 'password',
'port' => '3306',
'user' => 'user',
]
);
break;
}
Verwendung 3. PHP TYPO3 Kern-APIs (für Extbase/Fluid)
Möchten Sie den TYPO3-Kontext für Ihre eigene TYPO3-Extension oder Vorlage verwenden? Dann können Sie die TYPO3-Kernkontext-APIs einfach wie folgt aufrufen.
$applicationContext = \TYPO3\CMS\Core\Utility\GeneralUtility::getApplicationContext();
$applicationContext->isDevelopment();
$applicationContext->isTesting();
$applicationContext->isProduction();
Verwenden Sie 4. TypoScript-Bedingungen [applicationContext]
Und der letzte, Basierend auf Ihren Bedürfnissen, verwendet den "applicationContext" Symfony-Ausdruck TypoScript, um die TYPO3-Kontextumgebung zu überprüfen.
Es kann eine Reihe von praktischen Beispielen geben, z.B.: Auf dem Produktionsserver können Sie die Komprimierung von Javascript-Dateien aktivieren, während die Entwicklung diese Komprimierung deaktiviert haben sollte ;)
# Check in Production/Live
[applicationContext = Production/Live]
config.contentObjectExceptionHandler = 0
config {
compressJS = 1
concatenateJS = 1
}
[end]
# Check in Development mode
[applicationContext = Development]
config.contentObjectExceptionHandler = 1
config {
compressJS = 0
concatenateJS = 0
}
[end]
# Check in more then one TYPO3 context by “,” comma separated
[applicationContext = Development/Debugging, Development/ClientA]
[...]
[end]
# Check with regular expression to match your TYPO3 context
[applicationContext = /^Development\/Preview\/d+$/]
[...]
[end]
Verwenden Sie 5. TYPO3-Kontext im CLI anzeigen
Mit dem TYPO3-Befehl `typo3/sysext/core/bin/typo3` können Sie nun den aktuellen TYPO3-Anwendungskontext ermitteln.
Hilfreiche TYPO3-Kontexterweiterung
Ich habe eine TYPO3-Erweiterung gefunden, die mit TYPO3_CONTEXT verwandt ist. Übrigens habe ich diese Erweiterung nicht getestet. Wenn Sie sie gut kennen, teilen Sie Ihre Erfahrungen im Kommentarfeld mit.
TYPO3-Kontext-Konfigurationslader (EXT:context_loader)
Ein einfacher TYPO3-Konfigurationslader zum Erstellen und Konfigurieren Ihrer TYPO3-Kontextumgebung in /typo3conf/AdditionalConfiguration/
Conclusion
Danke für das Lesen des Artikels.
Ich tue mein Bestes, einen einfachen und leicht verständlichen Leitfaden-Blog für Sie zu führen, ich hoffe, Sie lernen mit Spaß :) Lassen Sie uns schnell den Artikel rekapitulieren.
- Verstehen und herausfinden, warum und wie Sie die TYPO3-Kontextfunktion benötigen? Sie sollten vorbereiten, wo Sie den TYPO3-Kontext implementieren sollten.
- Vergewissern Sie sich, dass Ihr Webserver (wie Apache, NGINX) bereit und mit dem TYPO3-Kontext konfiguriert ist.
- Beginnen Sie mit der Implementierung von TYPO3-Kontext auf Anwendungsebene mit PHP, TypoScript, YAML z.B., Konfiguration mehrerer Datenbanken, Site-URLs usw.
Haben Sie Erfahrung mit dem TYPO3-Kontext? Oder: Haben Sie Fragen zur Implementierung des TYPO3-Kontextes? Ich würde mich freuen, Ihre Erfahrungen zu erhalten, um solche kleinen, aber feinen TYPO3-Features weiter zu verbessern.
Haben Sie einen glücklichen TYPO3-Kontext!
The closing quote is missing at the end.
-
base: 'http://dev.t3planet.com/'
condition: 'applicationContext == "Development"
-
base: 'http://staging.t3planet.com/'
condition: 'applicationContext == "Production/Staging"
===>
-
base: 'http://dev.t3planet.com/'
condition: 'applicationContext == "Development"'
-
base: 'http://staging.t3planet.com/'
condition: 'applicationContext == "Production/Staging"'