Laravel 6

Récupérer le nom de la vue courante dans la vue

Avatar de itanea
itanea

Hello tout le monde,

Je souhaitais simplement savoir si vous connaissiez un moyen plus simple de récupérer le nom de la vue courante dans un template blade ? Pour ma part, en fouillant l'API de Laravel, j'ai utilisé cela ;

$viewName = array_keys(view()->getFinder()->getViews())[0]

Merci pour vos lumières, @ plus et prenez bien soin de vous.

Avatar de bestmomo
bestmomo

Salut,

Pourquoi ne pas envoyer le nom de la vue comme paramètre de la vue ?

Avatar de itanea
itanea

oui tu as raison, mais je voulais voir la technique sous jacente. Au final je me sers du nom des routes qui sont plus accessibles :

@if (Route::currentRouteName() == 'todos.index')
Avatar de bestmomo
bestmomo

Je suppose que c'est pour activer le bon item dans un menu.

Avatar de itanea
itanea

ça pourrait mais c'est plutôt pour déterminer quel bouton afficher en fonction de l'affichage en cours :

Image

Image

Avatar de CinquièmeDimension
CinquièmeDimension

Salut,

Moi je me suis servi de la request pour faire un test pour ajouter une classe dans mon menu:

class="collapse {{ request()->is('primes_*') ? 'show' : 'notshow' }}"

Dans mon example, si je suis sur une page dont l'url commence par "prime_" (ex: https://monapp.fr/primes_fiche/23) ça va m'ajouter la classe show sinon ça m'ajoute la classe notshow. J'ai pas utilisé la syntaxe @if mais c'est pareil c'est juste une sytaxe ternaire.

Je ne sais pas si ça peut t'aider

Avatar de itanea
itanea

Merci pour cet exemple CinquiemeDimension. Toutes ces astuces aident toujours.

La notation ternaire est d'ailleurs en effet bien pratique dans ces cas là et beaucoup moins lourde que les @if et autres.

A plus

Fred

Avatar de bestmomo
bestmomo

Pour faire plus concis on peut aussi créer des helpers, par exemple :

<?php

if (!function_exists('currentRoute')) {
    function currentRoute($route)
    {
        return request()->url() == route($route) ? ' class=current' : '';
    }
}

Du coup dans les vues :

<li {{ currentRoute('login') }}>
  <a href="{{ route('login') }}">@lang('Login')</a>
</li>

Vous ne pouvez pas répondre à ce sujet.