Creazione di una pagina in un modulo Drupal in modo programmatico
Ci sono due passaggi per creare una semplice pagina in Drupal:
Dichiarare la route e i suoi parametri.
Questo passaggio include il titolo della pagina, i requisiti di accesso alla pagina e altro.
In Drupal 7 era necessario implementare hook_menu().
In Drupal 8 si crea invece un file <module_name>.routing.yml nella directory principale del modulo.
Scrivere il codice per restituire il contenuto della pagina.
In Drupal 7 si scriveva una funzione callback della pagina, indicata in hook_menu().
In Drupal 8 il callback della pagina deve essere un metodo di una classe o un servizio registrato. Può differire a seconda delle condizioni (HTTP o HTTPS, intestazioni di contenuto, ecc.), ma ciò va oltre questo livello introduttivo.
Procedura
Seguendo l’esempio in questa pagina, sarai in grado di creare una semplice pagina nel tuo modulo personalizzato senza dover approfondire l’interno di Drupal. Per ulteriori dettagli consulta la Change record sulla modifica del sistema di routing e le varie implementazioni nel core e nel progetto Examples.
File di routing YAML per il modulo di esempio
Le informazioni di routing sono memorizzate in example/example.routing.yml:
example.my_page: path: '/mypage/page' defaults: _controller: '\Drupal\example\Controller\ExampleController::myPage' _title: 'My first page in D8' requirements: _permission: 'access content'
example.my_page
- Questo è il nome macchina della route. Per convenzione, i nomi macchina delle route dovrebbero essere module_name.sub_name. Quando altre parti del codice devono fare riferimento alla route, utilizzeranno questo nome macchina.
path
- Questo definisce il percorso della pagina sul tuo sito. Nota lo slash iniziale (/).
defaults
- Descrive il callback della pagina e il titolo. @todo: Dove possono essere sovrascritti questi valori predefiniti?
requirements
- Definisce le condizioni con cui la pagina sarà visualizzata. Puoi specificare permessi, moduli che devono essere abilitati e altre condizioni.
Implementazione della pagina per il modulo di esempio
La classe Controller ExampleController deve essere definita in example/src/Controller/ExampleController.php:
<?php namespace Drupal\example\Controller; use Drupal\Core\Controller\ControllerBase; /** * Provides route responses for the Example module. */ class ExampleController extends ControllerBase { /** * Returns a simple page. * * @return array * A simple renderable array. */ public function myPage() { $element = array( '#markup' => 'Hello, world', ); return $element; } }
namespace
- Qui si dichiara il prefisso necessario per definire completamente il nome della classe che stiamo creando. Confronta il blocco di documentazione e il nome della classe. L’autoloader sa che per cercare la classe \Drupal\example\Controller\ExampleController deve individuare il file modules/example/src/Controller/ExampleController.php.
use
- Ci consente di usare ControllerBase invece del nome completo della classe. Questo rende la dichiarazione della classe più leggibile.
myPage()
- Il metodo specificato nel file YAML deve essere pubblico. Deve restituire un array renderizzabile.