Laravel 5

Service Provider : Get route by name

  • Avatar de loicconan
    Membre depuis :
    12/04/2019
    Messages :
    2

    Bonjour,
    Dans un Service Provider (que ce soit dans le register ou le boot) j'essaye de faire un

    $var = Route::getRoutes()->getByName('MA_ROUTE');

    Cela me retour NULL.
    Pourtant Route::getRoutes() me retourne bien la liste de mes routes avec celle souhaitée dedans.

    Si je fais la même chose dans un contrôlleur pas de soucis.
    J'ai essayé en Facade mais aussi en injection de dépendance, même résultat.

    Avez-vous une idée ?

    Laravel 5.8.

    Merci.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Salut,

    getByName est une méthode de la collection des routes, ça peut pas marcher en l'appliquant au tableau retourné par getRoutes.

    $var = Route::getByName('MA_ROUTE');
  • Avatar de loicconan
    Membre depuis :
    12/04/2019
    Messages :
    2

    Merci de ta réponse.
    Malheureusement cette méthode n'existe pas à partir de la Facade Route :

    InvalidArgumentException
    Attribute [getByName] does not exist.
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2632

    Ah oui...

    J'ai fait un essai et j'ai vu qu'au niveau d'un provider les noms des routes ne sont pas encore renseignées dans le routeur, donc il faut le raffraichir, du coup le code devrait convenir comme ça :

    $routes = $this->app->routes;
    $routes->refreshNameLookups();
    $maRoute = $routes->getByName('MA_ROUTE');

    Le provider doit être à la fin de la pile et le code dans le boot.

Vous ne pouvez pas répondre à ce sujet.