it-swarm.com.de

Wie erstelle ich programmgesteuert eine Route?

Ich versuche, mithilfe dieses Codes programmgesteuert eine Route zu erstellen.

example.routing.yml

route_callbacks:
    - '\Drupal\example\Routing\ExampleRoutes::routes'

Drupal\example\Routing\ExampleRoutes.php

namespace Drupal\example\Routing;

use Symfony\Component\Routing\Route;

class ExampleRoutes {
    public function routes() {
        $routes = array();
        $routes['example.settings'] = new Route(
            '/example/',
            array(
              '_form' => '\Drupal\example\Form\ExampleForm',
            ),
            array(
              '_permission'  => 'access content',
            )
        );

        return $routes;
    }

}

Wenn ich das Modul installiere, wird folgende Fehlermeldung angezeigt

Klasse\Drupal\example\Routing\ExampleRoutes existiert nicht

Warum funktioniert der obige Code nicht?

3
Sergiu Tripon

Ich denke, dass in Ihrem Fall das Problem in dieser Zeile liegt:

    '/example/',

das sollte sein:

    '/example',

also ohne das letzte /.

Sie können es mit der anderen Methode versuchen, die sich von RouteSubscriberBase erstreckt, und Ihre Routenmethode muss als Parameter ein RouteCollection erhalten.

use Drupal\Core\Routing\RouteSubscriberBase;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

class ExampleRoutes extends RouteSubscriberBase {

  public function routes(RouteCollection $collection) {

  }

}

Und Sie müssen den Routenabonnenten als Dienst definieren

  example.route_subscriber:
    class: Drupal\example\Routing\ExampleRoutes
    tags:     - { name: event_subscriber }

Schauen Sie sich dieses Beispiel an:

Dynamische Routen in Drupal 8 mit einem RouteSubscriber

2

Versuchen Sie das folgende Beispiel, es funktioniert für mich.

example.routing.yml

 route_callbacks: 
 - '\ Drupal\example\Routing\ExampleRoutes :: route' 

src/Routing/ExampleRoutes.php

 Namespace Drupal\example\Routing; 
 
 Symfony\Component\Routing\Route verwenden; 
 Symfony\Component\Routing\RouteCollection verwenden; 
 
 Klasse ExampleRoutes {
 
 öffentliche Funktionsrouten () {
 $ route_collection = neue RouteCollection (); 
 $ route = neue Route (
 // Pfad zum Anhängen dieser Route an: 
 'Beispiel', 
 // Routenvorgaben: 
 
 '_Form' => 'Drupal\Beispiel\Form\ExampleForm ', 
, 
 // Routenanforderungen: 
 
' _permission '=>' Zugriff auf Inhalt ', 
 
); 
 $ route_collection-> add ('example.settings', $ route); 
 return $ route_collection; 
} 
 
} 

Beachten Sie, dass der Pfadparameter 'Beispiel' kein '/' haben sollte.

1
berramou