https://apical.xyz/fiches/les_liens_et_les_url_002/Travailler_avec_la_requete_HTTP_courante_request
Laravel nous permet de travailler avec un objet qui représente la requête HTTP courante. Il s'agit d'un objet de type Illuminate\Http\Request. Cet objet nous donnera accès à une foule d'informations, allant de l'URL de la page actuellement affichée jusqu'aux entêtes HTTP en passant par les cookies et les informations entrées dans un formulaire.
Objet de requête HTTP dans une méthode d'action
Dans une méthode d'action, pour travailler avec la variable $request, il faut demander à Laravel de l'injecter dans la méthode. Ceci sera fait simplement en ajoutant un paramètre de type Request.
Ex :
use Illuminate\Http\Request;
...
public function contact(Request $request) : View
{
...
$urlRelatif = $request->path();
...
}
Objet de la requête HTTP dans une vue
Plusieurs fonctionnalités des requêtes HTTP sont disponible sans l'objet $request, à l'aide d'autres fonctions qui se chargent elles-même de retrouver les informations sur la requête HTTP. On peut donc y accéder dans une vue en entourant le code par {{ et }}.
Par exemple, on obtiendra l'équivalent de $request->url() comme suit :
{{ url()->current() }}
Cependant, certaines fonctionnalités ne sont disponibles que si on a en main un objet $request. À ce moment, la vue pourra travailler avec la façade Request.
Ex :
{{ Request::path() }}
Quelques fonctionnalités intéressantes
Parmi les fonctionnalités de l'objet $request, notons :
- url() pour retrouver l'URL de la page actuelle, incluant le nom de domaine.
Ex :
Contrôleur Laravel (PHP)$url = $request->url();
Si l'URL de la page est http://mondomaine.com/produits, la variable $url aura la valeur http://mondomaine.com/produits.
- path() pour retrouver l'URL relatif de la page actuelle (sans le nom de domaine).
Ex :
Contrôleur Laravel (PHP)$url = $request->path();
Si l'URL de la page est http://mondomaine.com/produits, la variable $url aura la valeur produits.
- is() pour vérifier si l'URL de la page actuelle correspond à un patron.
Ex :
Vue Laravel (Blade)<li class="menu-item {!! Request::is('/') ? 'active' : '' !!}"><a href="{{ route('pages.accueil') }}">Accueil</a></li>
- userAgent() pour obtenir de l'information sur le navigateur.
Ex :
Contrôleur Laravel (PHP)$navigateur = $request->userAgent();
Sous Chrome, la variable $navigateur aura une valeur du genre "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36".
Et sous FireFox : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0".
- segment() pour travailler avec chacune des parties de l'URL de la page actuelle.Par exemple, le code suivant (qui est bien incomplet) permet d'afficher un fil d'Ariane. Il est inspiré de https://laravel-tricks.com/tricks/simple-breadcrumbs-with-blade-request.
Vue Laravel (Blade)
<ul class="page-breadcrumb">
<li>
<i class="fa fa-home"></i>
<a href="{{route('pages.accueil')}}">Accueil</a>
<i class="fa fa-angle-right"></i>
</li>
@for($i = 0; $i <= count(Request::segments()); $i++)
<li>
<a href=...>{{Request::segment($i)}}</a>
@if($i < count(Request::segments()) & $i > 0)
{!!'<i class="fa fa-angle-right"></i>'!!}
@endif
</li>
@endfor
</ul>