In Drupal 8 können benutzerdefinierte Fehlermeldungen auf verschiedene Arten verwendet werden. Eine Möglichkeit besteht darin, eine benutzerdefinierte Fehlermeldung für ein bestimmtes Formularfeld zu definieren. Hier ist ein Beispiel:
1. Öffnen Sie die Datei “MYMODULE.module” in Ihrem benutzerdefinierten Modul.
2. Fügen Sie folgenden Code hinzu:
```
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == ‘my_form_id’) {
$form[‘field_name’][‘#element_validate’][] = ‘_MYMODULE_validate_field_name’;
}
}
function _MYMODULE_validate_field_name($element, &$form_state) {
if (!preg_match(‘/^[A-Za-z]+$/’, $element[‘#value’])) {
form_set_error(‘field_name’, t(‘Das Feld darf nur Buchstaben enthalten.’));
}
}
```
3. Ersetzen Sie “MYMODULE” durch den Namen Ihres benutzerdefinierten Moduls.
4. Ersetzen Sie “my_form_id” durch die ID des Formulars, das Sie ändern möchten.
5. Ersetzen Sie “field_name” durch den Namen des Formularfelds, für das Sie eine benutzerdefinierte Fehlermeldung definieren möchten.
6. Passen Sie die RegEx-Ausdrücke in der Überprüfungsfunktion an, um Ihre spezifischen Anforderungen zu erfüllen.
Eine andere Möglichkeit besteht darin, benutzerdefinierte Fehlermeldungen für nicht validierte URL-Anfragen zu verwenden. Hier ist ein Beispiel:
1. Öffnen Sie die Datei “MYMODULE.routing.yml” in Ihrem benutzerdefinierten Modul.
2. Fügen Sie folgenden Code hinzu:
```
my_route:
path: ‘/my-route/{my_parameter}‘
defaults:
_controller: ‘\Drupal\MYMODULE\Controller\MyController::myMethod‘
_title: ‘My Page‘
requirements:
_custom_access: ‘\Drupal\MYMODULE\Controller\MyController::myAccessCheck‘
options:
_MYMODULE_error_route: ‘my_error_route‘
```
3. Ersetzen Sie “MYMODULE” durch den Namen Ihres benutzerdefinierten Moduls.
4. Ersetzen Sie “my_route” durch den Namen Ihrer Route.
5. Ersetzen Sie “my_parameter” durch den Namen des Parameters Ihrer Route, für den Sie eine benutzerdefinierte Fehlermeldung definieren möchten.
6. Ersetzen Sie “MyController” durch den Namen Ihrer Controller-Klasse.
7. Ersetzen Sie “myMethod” durch den Namen Ihrer Methode, die die Route verarbeitet.
8. Ersetzen Sie “myAccessCheck” durch den Namen Ihrer Zugriffsprüfungsmethode.
9. Ersetzen Sie “my_error_route” durch den Namen Ihrer Ersatzroute.
10. Erstellen Sie eine neue Route mit der Ziel-URL Ihrer benutzerdefinierten Fehlerseite.
11. Fügen Sie den folgenden Code zu Ihrer Controller-Klasse hinzu:
```
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
…
public function myMethod($my_parameter, RouteMatchInterface $route_match) {
if (!preg_match(‘/^[0-9]+$/’, $my_parameter)) {
$url = Url::fromRoute(‘my_error_route’)->toString();
throw new RedirectResponse(new Url($url)->setAbsolute()->toString());
}
…
}
public function myAccessCheck(RouteMatchInterface $route_match) {
if (!preg_match(‘/^[0-9]+$/’, $route_match->getParameter(‘my_parameter’))) {
throw new BadRequestHttpException(‘Invalid parameter’);
}
…
}
```
12. Passen Sie die RegEx-Ausdrücke in der Validierungsfunktion an, um Ihre spezifischen Anforderungen zu erfüllen.
13. Passen Sie “my_error_route” an den Namen Ihrer Ersatzroute an.
14. Passen Sie die spezifischen Fehlermeldungen in der Validierungsfunktion und Zugriffsprüfungsmethode an, um Ihre Anforderungen zu erfüllen.