Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Debuggare una rotta

Come eseguire il debug delle rotte tramite la console di Symfony per risolvere problemi che possiamo incontrare durante lo sviluppo di un'applicazione
Come eseguire il debug delle rotte tramite la console di Symfony per risolvere problemi che possiamo incontrare durante lo sviluppo di un'applicazione
Link copiato negli appunti

Nella precedente lezione abbiamo visto come impostare delle regole sulle rotte per abilitare l'accesso a specifiche aree dell'applicazione a specifici ruoli attraverso l'access_control.

Con un'applicazione articolata è facile spendere molto tempo nel debug di regole e rotte per capire perché essa non si comporta come ci aspettiamo. Lo stesso problema possiamo averlo anche nella creazione delle rotte; capita spesso che venga caricato il controller sbagliato, o peggio restituito un 404, nonostante abbiamo impostato una regola di routing.

Vediamo come eseguire il debug delle rotte attraverso la console di Symfony per risolvere facilmente eventuali problemi che possiamo incontrare durante lo sviluppo.

La prima verifica che possiamo effettuare consiste nel controllare che la rotta creata sia registrata tra le rotte. Il comando è:

$ bin/console debug:router
 -------------------------- -------- -------- ------ -----------------------------------
  Name                       Method   Scheme   Host   Path
 -------------------------- -------- -------- ------ -----------------------------------
  _preview_error             ANY      ANY      ANY    /_error/{code}.{_format}
  _wdt                       ANY      ANY      ANY    /_wdt/{token}
  _profiler_home             ANY      ANY      ANY    /_profiler/
  _profiler_search           ANY      ANY      ANY    /_profiler/search
  _profiler_search_bar       ANY      ANY      ANY    /_profiler/search_bar
  _profiler_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo
  _profiler_search_results   ANY      ANY      ANY    /_profiler/{token}/search/results
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open
  _profiler                  ANY      ANY      ANY    /_profiler/{token}
  _profiler_router           ANY      ANY      ANY    /_profiler/{token}/router
  _profiler_exception        ANY      ANY      ANY    /_profiler/{token}/exception
  _profiler_exception_css    ANY      ANY      ANY    /_profiler/{token}/exception.css
  app_login                  ANY      ANY      ANY    /login
  app_logout                 ANY      ANY      ANY    /logout
  index                      ANY      ANY      ANY    /
 -------------------------- -------- -------- ------ -----------------------------------

bin/console debug:router restituisce tutte le rotte registrate e possiamo notare le 3 rotte finora definite nell'applicazione: login, logout e home page. Possiamo poi passare il parametro --show-controllers per stampare anche il nome del controller chiamato.

Possiamo passare al comando il nome della rotta per vederne i dettagli:

$ bin/console debug:router app_login
+--------------+---------------------------------------------------------+
| Property     | Value                                                   |
+--------------+---------------------------------------------------------+
| Route Name   | app_login                                               |
| Path         | /login                                                  |
| Path Regex   | #^/login$#sDu                                           |
| Host         | ANY                                                     |
| Host Regex   |                                                         |
| Scheme       | ANY                                                     |
| Method       | ANY                                                     |
| Requirements | NO CUSTOM                                               |
| Class        | Symfony\Component\Routing\Route                         |
| Defaults     | _controller: App\Controller\SecurityController::login   |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler |
|              | utf8: true                                              |
+--------------+---------------------------------------------------------+

I primi 2 comandi possono dare indicazioni sul fatto che la regola compaia (e quindi non abbiamo sbagliato ad esempio a inserirla nella configurazione) e che richiami il controller e le regole giusti. Un caso comune di configurazione errata è quando si richiama una rotta che risponde solo con POST con metodi differenti, soprattutto GET.

Qualora non avessimo risolto il problema possiamo richiamare l'URI della rotta che non funziona per vedere il nome della rotta che fa match:

$ bin/console router:match /login
[OK] Route "app_login" matches
+--------------+---------------------------------------------------------+
| Property     | Value                                                   |
+--------------+---------------------------------------------------------+
| Route Name   | app_login                                               |
| Path         | /login                                                  |
| Path Regex   | #^/login$#sDu                                           |
| Host         | ANY                                                     |
| Host Regex   |                                                         |
| Scheme       | ANY                                                     |
| Method       | ANY                                                     |
| Requirements | NO CUSTOM                                               |
| Class        | Symfony\Component\Routing\Route                         |
| Defaults     | _controller: App\Controller\SecurityController::login   |
| Options      | compiler_class: Symfony\Component\Routing\RouteCompiler |
|              | utf8: true                                              |
+--------------+---------------------------------------------------------+

Ti consigliamo anche